tokmon 0.28.1 → 0.28.3
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.
- package/README.md +156 -234
- package/THIRD_PARTY_NOTICES.md +62 -0
- package/dist/{bootstrap-ink-L7QSJBMS.js → bootstrap-ink-WG4WG3R2.js} +1579 -1135
- package/dist/chunk-7CH6S7BR.js +447 -0
- package/dist/{chunk-CVKCVHS7.js → chunk-CFKUZCMB.js} +70 -310
- package/dist/chunk-HNWEJ6MS.js +1094 -0
- package/dist/chunk-JZSZEHVD.js +406 -0
- package/dist/{chunk-S33XIUAW.js → chunk-P57DVFNH.js} +277 -49
- package/dist/{chunk-4HU4EI5T.js → chunk-P5JN5DDX.js} +25 -46
- package/dist/chunk-TN6V7XSL.js +512 -0
- package/dist/chunk-USKOQIE3.js +278 -0
- package/dist/chunk-UYPDMVW5.js +21 -0
- package/dist/{cli-command-75LP4IDS.js → cli-command-MD3RJRP4.js} +249 -15
- package/dist/cli.js +6 -6
- package/dist/{config-HXFJTNLM.js → config-3DGZ47F7.js} +23 -3
- package/dist/daemon-EMOA36WB.js +377 -0
- package/dist/daemon-handle-JHE5MKMI.js +11 -0
- package/dist/server-EPSH52DR.js +12 -0
- package/dist/web/assets/{Area-CMXvOw33.js → Area-stRnp8Km.js} +1 -1
- package/dist/web/assets/analytics-moZZt9L_.js +2 -0
- package/dist/web/assets/breakdown-km9w7myU.js +4 -0
- package/dist/web/assets/button-DrX04Cc2.js +1 -0
- package/dist/web/assets/{chart-cZoLgpmG.js → chart-D0CtuL2k.js} +1 -1
- package/dist/web/assets/explore-B11uNJV1.js +22 -0
- package/dist/web/assets/index-RDhXsCNG.js +83 -0
- package/dist/web/assets/index-ZmOS8p9O.css +1 -0
- package/dist/web/assets/models-DYbZnY34.js +2 -0
- package/dist/web/assets/overview-CruICbfJ.js +2 -0
- package/dist/web/assets/panel-xckM3_GC.js +1 -0
- package/dist/web/assets/settings-sheet-G-BTSIF6.js +1 -0
- package/dist/web/assets/share-sheet-weIdd4DW.js +2 -0
- package/dist/web/assets/timeline-BHgniliZ.js +1 -0
- package/dist/web/index.html +30 -4
- package/package.json +13 -4
- package/site/THIRD_PARTY_NOTICES.md +83 -0
- package/site/public/fonts/OFL.txt +93 -0
- package/dist/chunk-3RTWFGGD.js +0 -275
- package/dist/chunk-FMP3P2WV.js +0 -299
- package/dist/chunk-HP5UZCXP.js +0 -436
- package/dist/chunk-SMPY52EV.js +0 -125
- package/dist/chunk-XDA5RJST.js +0 -193
- package/dist/daemon-CL4FJW26.js +0 -219
- package/dist/daemon-handle-QQLJE46Y.js +0 -10
- package/dist/server-EUO7CWYH.js +0 -11
- package/dist/web/assets/analytics-DqdZXOJL.js +0 -2
- package/dist/web/assets/breakdown-kOSSJ3mI.js +0 -4
- package/dist/web/assets/explore-vcsM8K9I.js +0 -22
- package/dist/web/assets/index-BErCXT7f.css +0 -1
- package/dist/web/assets/index-DH3dOnbg.js +0 -83
- package/dist/web/assets/models-B5ikm83_.js +0 -2
- package/dist/web/assets/overview-DD1kP8CP.js +0 -2
- package/dist/web/assets/panel-DTQBwExW.js +0 -1
- package/dist/web/assets/primitives-C36qJlA2.js +0 -1
- package/dist/web/assets/settings-sheet-_i2zTQjf.js +0 -1
- package/dist/web/assets/share-sheet-BLHmrFbm.js +0 -2
- package/dist/web/assets/timeline-B4uG-Emo.js +0 -1
- package/dist/web/assets/use-dialog-trap-bfaXEMz9.js +0 -1
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
BUILT_IN_THEME_PRESET_IDS,
|
|
4
|
+
DESKTOP_GRAPH_RANGES,
|
|
5
|
+
PROVIDER_IDS,
|
|
6
|
+
THEME_PRESET_IDS
|
|
7
|
+
} from "./chunk-HNWEJ6MS.js";
|
|
8
|
+
|
|
9
|
+
// src/rpc/contract.ts
|
|
10
|
+
import { Schema } from "effect";
|
|
11
|
+
import * as Rpc from "effect/unstable/rpc/Rpc";
|
|
12
|
+
import * as RpcGroup from "effect/unstable/rpc/RpcGroup";
|
|
13
|
+
var TOKMON_WS_PATH = "/ws";
|
|
14
|
+
var TOKMON_PROTOCOL_VERSION = 3;
|
|
15
|
+
var TOKMON_CAPABILITIES = ["config-cas", "config-revision", "allowed-hosts", "tray-config", "usage-activity", "tray-pins", "provider-pins", "desktop-disclosure", "desktop-graph-range", "provider-headroom", "canonical-identity", "appearance-v1", "theme-engine", "account-detection-v1"];
|
|
16
|
+
var TOKMON_WS_METHODS = {
|
|
17
|
+
getConfig: "tokmon.getConfig",
|
|
18
|
+
setConfig: "tokmon.setConfig",
|
|
19
|
+
refresh: "tokmon.refresh",
|
|
20
|
+
browseFs: "tokmon.browseFs",
|
|
21
|
+
snapshot: "tokmon.snapshot",
|
|
22
|
+
config: "tokmon.config"
|
|
23
|
+
};
|
|
24
|
+
var RefreshScopeSchema = Schema.Literals([
|
|
25
|
+
"all",
|
|
26
|
+
"summary",
|
|
27
|
+
"table",
|
|
28
|
+
"billing",
|
|
29
|
+
"peak"
|
|
30
|
+
]);
|
|
31
|
+
var ProviderIdSchema = Schema.Literals(PROVIDER_IDS);
|
|
32
|
+
var NonNegativeIntegerSchema = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
|
|
33
|
+
var PositiveFiniteSchema = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(1));
|
|
34
|
+
var AccountSchema = Schema.Struct({
|
|
35
|
+
id: Schema.String,
|
|
36
|
+
providerId: ProviderIdSchema,
|
|
37
|
+
name: Schema.String,
|
|
38
|
+
homeDir: Schema.String,
|
|
39
|
+
color: Schema.optionalKey(Schema.String)
|
|
40
|
+
});
|
|
41
|
+
var TrayConfigSchema = Schema.Struct({
|
|
42
|
+
enabled: Schema.Boolean,
|
|
43
|
+
showMenuBarText: Schema.Boolean,
|
|
44
|
+
displayMetric: Schema.Literals(["smartHeadroom", "tightestRemaining"]),
|
|
45
|
+
pollIntervalSec: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 86400 })),
|
|
46
|
+
activeTimeoutMin: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 1440 })),
|
|
47
|
+
graceMin: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 10080 })),
|
|
48
|
+
promotionHoldMin: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1440 })),
|
|
49
|
+
lowWatermarkPct: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 100 })),
|
|
50
|
+
criticalWatermarkPct: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 100 })),
|
|
51
|
+
pinnedAccount: Schema.NullOr(Schema.String),
|
|
52
|
+
pins: Schema.Array(Schema.String),
|
|
53
|
+
// Additive since `tray-pins`: older daemons omit it, so tolerate absence and let
|
|
54
|
+
// `repairConfig` materialise the empty default rather than failing the decode.
|
|
55
|
+
pinnedProviders: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
56
|
+
launchAtLogin: Schema.Boolean,
|
|
57
|
+
theme: Schema.Literal("dark")
|
|
58
|
+
});
|
|
59
|
+
var DesktopConfigSchema = Schema.Struct({
|
|
60
|
+
expandedProviders: Schema.Array(Schema.String),
|
|
61
|
+
graphRangeDays: Schema.optionalKey(Schema.Literals(DESKTOP_GRAPH_RANGES))
|
|
62
|
+
});
|
|
63
|
+
var AccountDetectionConfigSchema = Schema.Struct({
|
|
64
|
+
enabled: Schema.Boolean,
|
|
65
|
+
disabledProviders: Schema.Array(ProviderIdSchema),
|
|
66
|
+
excludedAccounts: Schema.Array(Schema.Struct({
|
|
67
|
+
providerId: ProviderIdSchema,
|
|
68
|
+
homeDir: Schema.String
|
|
69
|
+
}))
|
|
70
|
+
});
|
|
71
|
+
var HexColorSchema = Schema.String.check(Schema.isPattern(/^#[0-9a-f]{6}$/i));
|
|
72
|
+
var ThemeOverridesSchema = Schema.Struct({
|
|
73
|
+
canvas: Schema.optionalKey(HexColorSchema),
|
|
74
|
+
panel: Schema.optionalKey(HexColorSchema),
|
|
75
|
+
inset: Schema.optionalKey(HexColorSchema),
|
|
76
|
+
insetStrong: Schema.optionalKey(HexColorSchema),
|
|
77
|
+
chrome: Schema.optionalKey(HexColorSchema),
|
|
78
|
+
line: Schema.optionalKey(HexColorSchema),
|
|
79
|
+
lineStrong: Schema.optionalKey(HexColorSchema),
|
|
80
|
+
lineFaint: Schema.optionalKey(HexColorSchema),
|
|
81
|
+
text: Schema.optionalKey(HexColorSchema),
|
|
82
|
+
textDim: Schema.optionalKey(HexColorSchema),
|
|
83
|
+
textFaint: Schema.optionalKey(HexColorSchema),
|
|
84
|
+
textStrong: Schema.optionalKey(HexColorSchema),
|
|
85
|
+
accent: Schema.optionalKey(HexColorSchema),
|
|
86
|
+
cost: Schema.optionalKey(HexColorSchema),
|
|
87
|
+
positive: Schema.optionalKey(HexColorSchema)
|
|
88
|
+
});
|
|
89
|
+
var AppearanceConfigSchema = Schema.Struct({
|
|
90
|
+
version: Schema.Literal(1),
|
|
91
|
+
mode: Schema.Literals(["auto", "light", "dark"]),
|
|
92
|
+
preset: Schema.Literals(THEME_PRESET_IDS),
|
|
93
|
+
terminal: Schema.Literals(["ansi", "dark", "light", "off"]),
|
|
94
|
+
custom: Schema.optionalKey(Schema.Struct({
|
|
95
|
+
base: Schema.Literals(BUILT_IN_THEME_PRESET_IDS),
|
|
96
|
+
light: ThemeOverridesSchema,
|
|
97
|
+
dark: ThemeOverridesSchema
|
|
98
|
+
}))
|
|
99
|
+
});
|
|
100
|
+
var ConfigSchema = Schema.Struct({
|
|
101
|
+
revision: NonNegativeIntegerSchema,
|
|
102
|
+
interval: PositiveFiniteSchema,
|
|
103
|
+
billingInterval: PositiveFiniteSchema,
|
|
104
|
+
clearScreen: Schema.Boolean,
|
|
105
|
+
privacyMode: Schema.Boolean,
|
|
106
|
+
privacyToggleKey: Schema.String,
|
|
107
|
+
timezone: Schema.NullOr(Schema.String),
|
|
108
|
+
accounts: Schema.Array(AccountSchema),
|
|
109
|
+
activeAccountId: Schema.NullOr(Schema.String),
|
|
110
|
+
disabledProviders: Schema.Array(ProviderIdSchema),
|
|
111
|
+
onboarded: Schema.Boolean,
|
|
112
|
+
dashboardLayout: Schema.Literals(["grid", "single"]),
|
|
113
|
+
defaultFocus: Schema.Literals(["all", "last"]),
|
|
114
|
+
ascii: Schema.Literals(["auto", "on", "off"]),
|
|
115
|
+
allowNetworkAccess: Schema.Boolean,
|
|
116
|
+
allowedHosts: Schema.Array(Schema.String),
|
|
117
|
+
resetDisplay: Schema.Literals(["relative", "absolute"]),
|
|
118
|
+
knownProviders: Schema.Array(ProviderIdSchema),
|
|
119
|
+
// Additive under `appearance-v1`; omission is accepted for old clients and
|
|
120
|
+
// preserved by the daemon's CAS boundary rather than resetting the theme.
|
|
121
|
+
appearance: Schema.optionalKey(AppearanceConfigSchema),
|
|
122
|
+
// Additive: older clients omit detector policy, so the daemon preserves its
|
|
123
|
+
// current value and repairConfig supplies legacy current-behaviour defaults.
|
|
124
|
+
accountDetection: Schema.optionalKey(AccountDetectionConfigSchema),
|
|
125
|
+
// The complete tray block was added within protocol v3. Accept omission from
|
|
126
|
+
// older peers and normalize it at the client / preserve it at the CAS boundary.
|
|
127
|
+
tray: Schema.optionalKey(TrayConfigSchema),
|
|
128
|
+
desktop: Schema.optionalKey(DesktopConfigSchema)
|
|
129
|
+
});
|
|
130
|
+
var ProtocolInfoSchema = Schema.Struct({
|
|
131
|
+
version: Schema.Literal(TOKMON_PROTOCOL_VERSION),
|
|
132
|
+
// Capabilities are additive within a protocol version. Older clients must
|
|
133
|
+
// preserve forward compatibility when a newer daemon advertises one they do
|
|
134
|
+
// not understand yet.
|
|
135
|
+
capabilities: Schema.Array(Schema.String)
|
|
136
|
+
});
|
|
137
|
+
var ConfigStateSchema = Schema.Struct({
|
|
138
|
+
protocol: ProtocolInfoSchema,
|
|
139
|
+
config: ConfigSchema
|
|
140
|
+
});
|
|
141
|
+
var ConfigUpdateRequestSchema = Schema.Struct({
|
|
142
|
+
expectedRevision: NonNegativeIntegerSchema,
|
|
143
|
+
config: ConfigSchema
|
|
144
|
+
});
|
|
145
|
+
var LegacyConfigUpdateConflictSchema = Schema.Struct({
|
|
146
|
+
kind: Schema.Literal("conflict"),
|
|
147
|
+
state: ConfigStateSchema
|
|
148
|
+
});
|
|
149
|
+
var ConfigUpdateConflictFailure = class extends Schema.TaggedErrorClass()(
|
|
150
|
+
"ConfigUpdateConflictFailure",
|
|
151
|
+
{
|
|
152
|
+
kind: Schema.Literal("conflict"),
|
|
153
|
+
state: ConfigStateSchema
|
|
154
|
+
}
|
|
155
|
+
) {
|
|
156
|
+
};
|
|
157
|
+
var LegacyConfigPersistenceFailureSchema = Schema.Struct({
|
|
158
|
+
kind: Schema.Literal("persistence"),
|
|
159
|
+
message: Schema.String
|
|
160
|
+
});
|
|
161
|
+
var ConfigPersistenceFailure = class extends Schema.TaggedErrorClass()(
|
|
162
|
+
"ConfigPersistenceFailure",
|
|
163
|
+
{
|
|
164
|
+
kind: Schema.Literal("persistence"),
|
|
165
|
+
message: Schema.String
|
|
166
|
+
}
|
|
167
|
+
) {
|
|
168
|
+
};
|
|
169
|
+
var ConfigUpdateConflictSchema = Schema.Union([
|
|
170
|
+
ConfigUpdateConflictFailure,
|
|
171
|
+
LegacyConfigUpdateConflictSchema
|
|
172
|
+
]);
|
|
173
|
+
var ConfigPersistenceFailureSchema = Schema.Union([
|
|
174
|
+
ConfigPersistenceFailure,
|
|
175
|
+
LegacyConfigPersistenceFailureSchema
|
|
176
|
+
]);
|
|
177
|
+
var RefreshFailure = class extends Schema.TaggedErrorClass()(
|
|
178
|
+
"RefreshFailure",
|
|
179
|
+
{
|
|
180
|
+
kind: Schema.Literal("refresh"),
|
|
181
|
+
message: Schema.String
|
|
182
|
+
}
|
|
183
|
+
) {
|
|
184
|
+
};
|
|
185
|
+
var FsEntrySchema = Schema.Struct({
|
|
186
|
+
name: Schema.String,
|
|
187
|
+
path: Schema.String,
|
|
188
|
+
dir: Schema.Boolean
|
|
189
|
+
});
|
|
190
|
+
var FsListingSchema = Schema.Struct({
|
|
191
|
+
path: Schema.String,
|
|
192
|
+
parent: Schema.NullOr(Schema.String),
|
|
193
|
+
entries: Schema.Array(FsEntrySchema)
|
|
194
|
+
});
|
|
195
|
+
var UsageSummarySchema = Schema.Struct({
|
|
196
|
+
cost: Schema.Finite,
|
|
197
|
+
tokens: Schema.Finite,
|
|
198
|
+
input: Schema.Finite,
|
|
199
|
+
cacheRead: Schema.Finite,
|
|
200
|
+
cacheSavings: Schema.Finite
|
|
201
|
+
});
|
|
202
|
+
var ModelDetailSchema = Schema.Struct({
|
|
203
|
+
name: Schema.String,
|
|
204
|
+
input: Schema.Finite,
|
|
205
|
+
output: Schema.Finite,
|
|
206
|
+
cacheCreate: Schema.Finite,
|
|
207
|
+
cacheRead: Schema.Finite,
|
|
208
|
+
cacheSavings: Schema.Finite,
|
|
209
|
+
cost: Schema.Finite,
|
|
210
|
+
count: Schema.Finite
|
|
211
|
+
});
|
|
212
|
+
var TableRowSchema = Schema.Struct({
|
|
213
|
+
label: Schema.String,
|
|
214
|
+
models: Schema.Array(Schema.String),
|
|
215
|
+
input: Schema.Finite,
|
|
216
|
+
output: Schema.Finite,
|
|
217
|
+
cacheCreate: Schema.Finite,
|
|
218
|
+
cacheRead: Schema.Finite,
|
|
219
|
+
cacheSavings: Schema.Finite,
|
|
220
|
+
total: Schema.Finite,
|
|
221
|
+
cost: Schema.Finite,
|
|
222
|
+
count: Schema.Finite,
|
|
223
|
+
breakdown: Schema.Array(ModelDetailSchema)
|
|
224
|
+
});
|
|
225
|
+
var DashboardDataSchema = Schema.Struct({
|
|
226
|
+
today: UsageSummarySchema,
|
|
227
|
+
week: UsageSummarySchema,
|
|
228
|
+
month: UsageSummarySchema,
|
|
229
|
+
burnRate: Schema.Finite,
|
|
230
|
+
series: Schema.Array(Schema.Finite),
|
|
231
|
+
lastActivityAt: Schema.NullOr(NonNegativeIntegerSchema)
|
|
232
|
+
});
|
|
233
|
+
var TableDataSchema = Schema.Struct({
|
|
234
|
+
daily: Schema.Array(TableRowSchema),
|
|
235
|
+
weekly: Schema.Array(TableRowSchema),
|
|
236
|
+
monthly: Schema.Array(TableRowSchema)
|
|
237
|
+
});
|
|
238
|
+
var MetricFormatSchema = Schema.Union([
|
|
239
|
+
Schema.Struct({ kind: Schema.Literal("percent") }),
|
|
240
|
+
Schema.Struct({ kind: Schema.Literal("dollars"), currency: Schema.optionalKey(Schema.String) }),
|
|
241
|
+
Schema.Struct({ kind: Schema.Literal("count"), suffix: Schema.optionalKey(Schema.String) })
|
|
242
|
+
]);
|
|
243
|
+
var MetricSchema = Schema.Struct({
|
|
244
|
+
key: Schema.optionalKey(Schema.String),
|
|
245
|
+
role: Schema.optionalKey(Schema.Literals(["session", "weekly", "model", "other", "unbounded"])),
|
|
246
|
+
modelId: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
247
|
+
active: Schema.optionalKey(Schema.Boolean),
|
|
248
|
+
label: Schema.String,
|
|
249
|
+
used: Schema.Finite,
|
|
250
|
+
limit: Schema.NullOr(Schema.Finite),
|
|
251
|
+
format: MetricFormatSchema,
|
|
252
|
+
resetsAt: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
253
|
+
primary: Schema.optionalKey(Schema.Boolean)
|
|
254
|
+
});
|
|
255
|
+
var MetricRoleSchema = Schema.Literals(["session", "weekly", "model", "other", "unbounded"]);
|
|
256
|
+
var AccountIdentityViewSchema = Schema.Struct({
|
|
257
|
+
title: Schema.String,
|
|
258
|
+
subtitle: Schema.NullOr(Schema.String),
|
|
259
|
+
accessibleLabel: Schema.String,
|
|
260
|
+
redacted: Schema.Boolean
|
|
261
|
+
});
|
|
262
|
+
var QuotaViewSchema = Schema.Struct({
|
|
263
|
+
key: Schema.String,
|
|
264
|
+
label: Schema.String,
|
|
265
|
+
role: MetricRoleSchema,
|
|
266
|
+
modelId: Schema.NullOr(Schema.String),
|
|
267
|
+
usedPct: Schema.NullOr(Schema.Finite),
|
|
268
|
+
remainingPct: Schema.NullOr(Schema.Finite),
|
|
269
|
+
resetsAt: Schema.NullOr(NonNegativeIntegerSchema),
|
|
270
|
+
bounded: Schema.Boolean,
|
|
271
|
+
primary: Schema.Boolean,
|
|
272
|
+
active: Schema.Boolean,
|
|
273
|
+
displayOrder: NonNegativeIntegerSchema,
|
|
274
|
+
valueText: Schema.String
|
|
275
|
+
});
|
|
276
|
+
var HeadroomFactorSchema = Schema.Struct({
|
|
277
|
+
key: Schema.String,
|
|
278
|
+
label: Schema.String,
|
|
279
|
+
role: MetricRoleSchema,
|
|
280
|
+
remainingPct: Schema.Finite,
|
|
281
|
+
included: Schema.Boolean,
|
|
282
|
+
reason: Schema.Literals(["session", "active-model", "weekly-cap", "primary", "fallback-floor"])
|
|
283
|
+
});
|
|
284
|
+
var HeadroomViewSchema = Schema.Struct({
|
|
285
|
+
value: Schema.NullOr(Schema.Finite),
|
|
286
|
+
unit: Schema.Literal("index-100"),
|
|
287
|
+
mode: Schema.Literals(["smart", "single-window", "fallback-floor", "unavailable"]),
|
|
288
|
+
basis: Schema.Literals(["active", "idle-runway", "unavailable"]),
|
|
289
|
+
representativeAccountId: Schema.NullOr(Schema.String),
|
|
290
|
+
activeAccountIds: Schema.Array(Schema.String),
|
|
291
|
+
factors: Schema.Array(HeadroomFactorSchema),
|
|
292
|
+
explanation: Schema.String
|
|
293
|
+
});
|
|
294
|
+
var BillingResultSchema = Schema.Struct({
|
|
295
|
+
plan: Schema.NullOr(Schema.String),
|
|
296
|
+
metrics: Schema.Array(MetricSchema),
|
|
297
|
+
error: Schema.NullOr(Schema.String),
|
|
298
|
+
email: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
299
|
+
displayName: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
300
|
+
activity: Schema.optionalKey(Schema.NullOr(Schema.Struct({
|
|
301
|
+
series: Schema.Array(Schema.Finite),
|
|
302
|
+
summary: Schema.String
|
|
303
|
+
}))),
|
|
304
|
+
modelSpend: Schema.optionalKey(Schema.NullOr(Schema.Array(Schema.Struct({
|
|
305
|
+
name: Schema.String,
|
|
306
|
+
usd: Schema.Finite,
|
|
307
|
+
requests: Schema.Finite
|
|
308
|
+
})))),
|
|
309
|
+
asOfMs: Schema.optionalKey(NonNegativeIntegerSchema)
|
|
310
|
+
});
|
|
311
|
+
var WebAccountSchema = Schema.Struct({
|
|
312
|
+
id: Schema.String,
|
|
313
|
+
providerId: ProviderIdSchema,
|
|
314
|
+
name: Schema.String,
|
|
315
|
+
color: Schema.String,
|
|
316
|
+
homeDir: Schema.NullOr(Schema.String),
|
|
317
|
+
hasUsage: Schema.Boolean,
|
|
318
|
+
hasBilling: Schema.Boolean,
|
|
319
|
+
email: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
320
|
+
displayName: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
321
|
+
identity: Schema.optionalKey(AccountIdentityViewSchema),
|
|
322
|
+
quotas: Schema.optionalKey(Schema.Array(QuotaViewSchema)),
|
|
323
|
+
headroom: Schema.optionalKey(HeadroomViewSchema),
|
|
324
|
+
plan: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
325
|
+
lastActivityAt: Schema.NullOr(NonNegativeIntegerSchema),
|
|
326
|
+
dashboard: Schema.NullOr(DashboardDataSchema),
|
|
327
|
+
table: Schema.NullOr(TableDataSchema),
|
|
328
|
+
billing: Schema.NullOr(BillingResultSchema),
|
|
329
|
+
summaryState: Schema.Literals(["pending", "ready", "error"]),
|
|
330
|
+
billingState: Schema.Literals(["pending", "ready", "error"]),
|
|
331
|
+
tableState: Schema.Literals(["pending", "ready", "error"]),
|
|
332
|
+
summaryUpdatedAt: Schema.optionalKey(Schema.NullOr(NonNegativeIntegerSchema)),
|
|
333
|
+
billingUpdatedAt: Schema.optionalKey(Schema.NullOr(NonNegativeIntegerSchema)),
|
|
334
|
+
tableUpdatedAt: Schema.optionalKey(Schema.NullOr(NonNegativeIntegerSchema))
|
|
335
|
+
});
|
|
336
|
+
var WebSnapshotSchema = Schema.Struct({
|
|
337
|
+
version: Schema.String,
|
|
338
|
+
generatedAt: NonNegativeIntegerSchema,
|
|
339
|
+
tz: Schema.String,
|
|
340
|
+
intervalMs: PositiveFiniteSchema,
|
|
341
|
+
billingIntervalMs: Schema.optionalKey(PositiveFiniteSchema),
|
|
342
|
+
providers: Schema.Array(Schema.Struct({
|
|
343
|
+
id: ProviderIdSchema,
|
|
344
|
+
name: Schema.String,
|
|
345
|
+
color: Schema.String,
|
|
346
|
+
headroom: Schema.optionalKey(HeadroomViewSchema)
|
|
347
|
+
})),
|
|
348
|
+
accounts: Schema.Array(WebAccountSchema),
|
|
349
|
+
seeded: Schema.Boolean,
|
|
350
|
+
peak: Schema.NullOr(Schema.Struct({
|
|
351
|
+
state: Schema.Literals(["peak", "off-peak", "weekend"]),
|
|
352
|
+
label: Schema.String,
|
|
353
|
+
// The upstream clock is only normalized to a finite number; do not make
|
|
354
|
+
// the wire contract narrower than the producer's declared type.
|
|
355
|
+
minutesUntilChange: Schema.NullOr(Schema.Finite),
|
|
356
|
+
changesAt: Schema.optionalKey(Schema.NullOr(Schema.String))
|
|
357
|
+
}))
|
|
358
|
+
});
|
|
359
|
+
var EmptyPayloadSchema = Schema.Struct({});
|
|
360
|
+
var GetConfigRpc = Rpc.make(TOKMON_WS_METHODS.getConfig, {
|
|
361
|
+
payload: EmptyPayloadSchema,
|
|
362
|
+
success: ConfigStateSchema
|
|
363
|
+
});
|
|
364
|
+
var SetConfigRpc = Rpc.make(TOKMON_WS_METHODS.setConfig, {
|
|
365
|
+
payload: ConfigUpdateRequestSchema,
|
|
366
|
+
success: ConfigStateSchema,
|
|
367
|
+
error: Schema.Union([ConfigUpdateConflictSchema, ConfigPersistenceFailureSchema])
|
|
368
|
+
});
|
|
369
|
+
var RefreshRpc = Rpc.make(TOKMON_WS_METHODS.refresh, {
|
|
370
|
+
payload: Schema.Struct({ scope: RefreshScopeSchema }),
|
|
371
|
+
success: Schema.Void,
|
|
372
|
+
error: RefreshFailure
|
|
373
|
+
});
|
|
374
|
+
var BrowseFsRpc = Rpc.make(TOKMON_WS_METHODS.browseFs, {
|
|
375
|
+
payload: Schema.Struct({ path: Schema.String }),
|
|
376
|
+
success: FsListingSchema
|
|
377
|
+
});
|
|
378
|
+
var SnapshotRpc = Rpc.make(TOKMON_WS_METHODS.snapshot, {
|
|
379
|
+
payload: EmptyPayloadSchema,
|
|
380
|
+
success: WebSnapshotSchema,
|
|
381
|
+
stream: true
|
|
382
|
+
});
|
|
383
|
+
var ConfigRpc = Rpc.make(TOKMON_WS_METHODS.config, {
|
|
384
|
+
payload: EmptyPayloadSchema,
|
|
385
|
+
success: ConfigStateSchema,
|
|
386
|
+
stream: true
|
|
387
|
+
});
|
|
388
|
+
var TokmonRpcGroup = RpcGroup.make(
|
|
389
|
+
GetConfigRpc,
|
|
390
|
+
SetConfigRpc,
|
|
391
|
+
RefreshRpc,
|
|
392
|
+
BrowseFsRpc,
|
|
393
|
+
SnapshotRpc,
|
|
394
|
+
ConfigRpc
|
|
395
|
+
);
|
|
396
|
+
|
|
397
|
+
export {
|
|
398
|
+
TOKMON_WS_PATH,
|
|
399
|
+
TOKMON_PROTOCOL_VERSION,
|
|
400
|
+
TOKMON_CAPABILITIES,
|
|
401
|
+
TOKMON_WS_METHODS,
|
|
402
|
+
ConfigUpdateConflictFailure,
|
|
403
|
+
ConfigPersistenceFailure,
|
|
404
|
+
RefreshFailure,
|
|
405
|
+
TokmonRpcGroup
|
|
406
|
+
};
|