@deadair/sdk 0.7.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/activity/activity.client.d.ts +12 -0
  4. package/dist/activity/activity.client.d.ts.map +1 -0
  5. package/dist/activity/types/activity.types.d.ts +60 -0
  6. package/dist/activity/types/activity.types.d.ts.map +1 -0
  7. package/dist/activity/types/index.d.ts +2 -0
  8. package/dist/activity/types/index.d.ts.map +1 -0
  9. package/dist/art/art.client.d.ts +21 -0
  10. package/dist/art/art.client.d.ts.map +1 -0
  11. package/dist/authentication/authentication.client.d.ts +33 -0
  12. package/dist/authentication/authentication.client.d.ts.map +1 -0
  13. package/dist/authentication/authentication.factor.client.d.ts +41 -0
  14. package/dist/authentication/authentication.factor.client.d.ts.map +1 -0
  15. package/dist/authentication/authentication.sessions.client.d.ts +20 -0
  16. package/dist/authentication/authentication.sessions.client.d.ts.map +1 -0
  17. package/dist/authentication/types/authentication.types.d.ts +846 -0
  18. package/dist/authentication/types/authentication.types.d.ts.map +1 -0
  19. package/dist/authentication/types/index.d.ts +3 -0
  20. package/dist/authentication/types/index.d.ts.map +1 -0
  21. package/dist/authentication/types/registration.types.d.ts +336 -0
  22. package/dist/authentication/types/registration.types.d.ts.map +1 -0
  23. package/dist/catalog/catalog.client.d.ts +96 -0
  24. package/dist/catalog/catalog.client.d.ts.map +1 -0
  25. package/dist/catalog/types/catalog.types.d.ts +593 -0
  26. package/dist/catalog/types/catalog.types.d.ts.map +1 -0
  27. package/dist/catalog/types/index.d.ts +2 -0
  28. package/dist/catalog/types/index.d.ts.map +1 -0
  29. package/dist/charts/charts.client.d.ts +17 -0
  30. package/dist/charts/charts.client.d.ts.map +1 -0
  31. package/dist/charts/types/charts.types.d.ts +54 -0
  32. package/dist/charts/types/charts.types.d.ts.map +1 -0
  33. package/dist/charts/types/index.d.ts +2 -0
  34. package/dist/charts/types/index.d.ts.map +1 -0
  35. package/dist/deadair.sdk.d.ts +49 -0
  36. package/dist/deadair.sdk.d.ts.map +1 -0
  37. package/dist/director/director.client.d.ts +98 -0
  38. package/dist/director/director.client.d.ts.map +1 -0
  39. package/dist/director/types/clock.types.d.ts +57 -0
  40. package/dist/director/types/clock.types.d.ts.map +1 -0
  41. package/dist/director/types/director.types.d.ts +212 -0
  42. package/dist/director/types/director.types.d.ts.map +1 -0
  43. package/dist/director/types/index.d.ts +3 -0
  44. package/dist/director/types/index.d.ts.map +1 -0
  45. package/dist/history/history.client.d.ts +12 -0
  46. package/dist/history/history.client.d.ts.map +1 -0
  47. package/dist/history/types/history.types.d.ts +44 -0
  48. package/dist/history/types/history.types.d.ts.map +1 -0
  49. package/dist/history/types/index.d.ts +2 -0
  50. package/dist/history/types/index.d.ts.map +1 -0
  51. package/dist/index.d.ts +49 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +3509 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/news/news.client.d.ts +17 -0
  56. package/dist/news/news.client.d.ts.map +1 -0
  57. package/dist/news/types/index.d.ts +2 -0
  58. package/dist/news/types/index.d.ts.map +1 -0
  59. package/dist/news/types/news.types.d.ts +61 -0
  60. package/dist/news/types/news.types.d.ts.map +1 -0
  61. package/dist/nowplaying/nowplaying.client.d.ts +12 -0
  62. package/dist/nowplaying/nowplaying.client.d.ts.map +1 -0
  63. package/dist/nowplaying/types/index.d.ts +2 -0
  64. package/dist/nowplaying/types/index.d.ts.map +1 -0
  65. package/dist/nowplaying/types/nowplaying.types.d.ts +59 -0
  66. package/dist/nowplaying/types/nowplaying.types.d.ts.map +1 -0
  67. package/dist/onboarding/onboarding.client.d.ts +11 -0
  68. package/dist/onboarding/onboarding.client.d.ts.map +1 -0
  69. package/dist/onboarding/types/index.d.ts +2 -0
  70. package/dist/onboarding/types/index.d.ts.map +1 -0
  71. package/dist/onboarding/types/onboarding.types.d.ts +41 -0
  72. package/dist/onboarding/types/onboarding.types.d.ts.map +1 -0
  73. package/dist/personas/personas.client.d.ts +167 -0
  74. package/dist/personas/personas.client.d.ts.map +1 -0
  75. package/dist/personas/types/index.d.ts +2 -0
  76. package/dist/personas/types/index.d.ts.map +1 -0
  77. package/dist/personas/types/personas.types.d.ts +545 -0
  78. package/dist/personas/types/personas.types.d.ts.map +1 -0
  79. package/dist/playlists/playlists.client.d.ts +17 -0
  80. package/dist/playlists/playlists.client.d.ts.map +1 -0
  81. package/dist/playlists/types/index.d.ts +2 -0
  82. package/dist/playlists/types/index.d.ts.map +1 -0
  83. package/dist/playlists/types/playlists.types.d.ts +71 -0
  84. package/dist/playlists/types/playlists.types.d.ts.map +1 -0
  85. package/dist/playout/playout.client.d.ts +37 -0
  86. package/dist/playout/playout.client.d.ts.map +1 -0
  87. package/dist/playout/types/index.d.ts +2 -0
  88. package/dist/playout/types/index.d.ts.map +1 -0
  89. package/dist/playout/types/playout.types.d.ts +163 -0
  90. package/dist/playout/types/playout.types.d.ts.map +1 -0
  91. package/dist/plugins/plugins.client.d.ts +107 -0
  92. package/dist/plugins/plugins.client.d.ts.map +1 -0
  93. package/dist/plugins/types/index.d.ts +2 -0
  94. package/dist/plugins/types/index.d.ts.map +1 -0
  95. package/dist/plugins/types/plugins.types.d.ts +330 -0
  96. package/dist/plugins/types/plugins.types.d.ts.map +1 -0
  97. package/dist/productions/productions.client.d.ts +22 -0
  98. package/dist/productions/productions.client.d.ts.map +1 -0
  99. package/dist/productions/types/index.d.ts +2 -0
  100. package/dist/productions/types/index.d.ts.map +1 -0
  101. package/dist/productions/types/productions.types.d.ts +90 -0
  102. package/dist/productions/types/productions.types.d.ts.map +1 -0
  103. package/dist/render/render.client.d.ts +210 -0
  104. package/dist/render/render.client.d.ts.map +1 -0
  105. package/dist/render/types/index.d.ts +2 -0
  106. package/dist/render/types/index.d.ts.map +1 -0
  107. package/dist/render/types/render.types.d.ts +518 -0
  108. package/dist/render/types/render.types.d.ts.map +1 -0
  109. package/dist/schedule/schedule.client.d.ts +37 -0
  110. package/dist/schedule/schedule.client.d.ts.map +1 -0
  111. package/dist/schedule/types/index.d.ts +2 -0
  112. package/dist/schedule/types/index.d.ts.map +1 -0
  113. package/dist/schedule/types/schedule.types.d.ts +119 -0
  114. package/dist/schedule/types/schedule.types.d.ts.map +1 -0
  115. package/dist/sdk-options.d.ts +45 -0
  116. package/dist/sdk-options.d.ts.map +1 -0
  117. package/dist/settings/settings.client.d.ts +17 -0
  118. package/dist/settings/settings.client.d.ts.map +1 -0
  119. package/dist/settings/types/index.d.ts +2 -0
  120. package/dist/settings/types/index.d.ts.map +1 -0
  121. package/dist/settings/types/settings.types.d.ts +35 -0
  122. package/dist/settings/types/settings.types.d.ts.map +1 -0
  123. package/dist/shared/types/index.d.ts +2 -0
  124. package/dist/shared/types/index.d.ts.map +1 -0
  125. package/dist/shared/types/pagination.d.ts +34 -0
  126. package/dist/shared/types/pagination.d.ts.map +1 -0
  127. package/dist/station/station.client.d.ts +49 -0
  128. package/dist/station/station.client.d.ts.map +1 -0
  129. package/dist/station/types/index.d.ts +4 -0
  130. package/dist/station/types/index.d.ts.map +1 -0
  131. package/dist/station/types/logs.types.d.ts +73 -0
  132. package/dist/station/types/logs.types.d.ts.map +1 -0
  133. package/dist/station/types/station.types.d.ts +120 -0
  134. package/dist/station/types/station.types.d.ts.map +1 -0
  135. package/dist/station/types/traces.types.d.ts +91 -0
  136. package/dist/station/types/traces.types.d.ts.map +1 -0
  137. package/dist/storage/storage.client.d.ts +12 -0
  138. package/dist/storage/storage.client.d.ts.map +1 -0
  139. package/dist/storage/types/index.d.ts +2 -0
  140. package/dist/storage/types/index.d.ts.map +1 -0
  141. package/dist/storage/types/storage.types.d.ts +59 -0
  142. package/dist/storage/types/storage.types.d.ts.map +1 -0
  143. package/dist/stream/stream.client.d.ts +32 -0
  144. package/dist/stream/stream.client.d.ts.map +1 -0
  145. package/dist/stream/types/index.d.ts +2 -0
  146. package/dist/stream/types/index.d.ts.map +1 -0
  147. package/dist/stream/types/stream.types.d.ts +47 -0
  148. package/dist/stream/types/stream.types.d.ts.map +1 -0
  149. package/dist/topics/topics.client.d.ts +32 -0
  150. package/dist/topics/topics.client.d.ts.map +1 -0
  151. package/dist/topics/types/index.d.ts +2 -0
  152. package/dist/topics/types/index.d.ts.map +1 -0
  153. package/dist/topics/types/topics.types.d.ts +65 -0
  154. package/dist/topics/types/topics.types.d.ts.map +1 -0
  155. package/package.json +53 -0
@@ -0,0 +1,330 @@
1
+ import { DateTime } from 'luxon';
2
+ /**
3
+ * Lifecycle state of a plugin the host knows about
4
+ * generated from [PluginStatus](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L7)
5
+ */
6
+ export type PluginStatus = 'discovered' | 'disabled' | 'misconfigured' | 'active' | 'failed';
7
+ /**
8
+ * Where the station found a plugin: shipped inside the image, or installed by the operator into the plugins
9
+ * directory on the data volume. Says nothing about trust; both kinds run inside the station with its privileges
10
+ * generated from [PluginOrigin](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L11)
11
+ */
12
+ export type PluginOrigin = 'bundled' | 'installed';
13
+ /**
14
+ * generated from [ConfigFieldType](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L13)
15
+ */
16
+ export type ConfigFieldType = 'string' | 'text' | 'url' | 'secret' | 'number' | 'boolean' | 'select' | 'multiselect' | 'list' | 'note';
17
+ /**
18
+ * What a `number` field's value is measured in. The stored value is always in this unit; only the
19
+ * control the operator touches changes, so a byte count stays a byte count everywhere it is read and
20
+ * a `fraction` stays the share between 0 and 1 that the code multiplying by it wants
21
+ * generated from [ConfigFieldUnit](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L18)
22
+ */
23
+ export type ConfigFieldUnit = 'bytes' | 'fraction';
24
+ /**
25
+ * The control a field asks to be drawn with, where the ordinary one for its type reads badly. Opt-in
26
+ * per field rather than inferred, because a slider is right for a value you feel for and wrong for
27
+ * one you have to hit exactly, and `tags` is right for a comma-separated line that is really a SET
28
+ * and wrong for one that is prose. Nothing about the stored value changes either way
29
+ * generated from [ConfigFieldControl](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L24)
30
+ */
31
+ export type ConfigFieldControl = 'slider' | 'tags';
32
+ /**
33
+ * One choice of a `select` config field
34
+ * generated from [ConfigFieldOption](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L27)
35
+ */
36
+ export interface ConfigFieldOption {
37
+ value: string;
38
+ label: string;
39
+ }
40
+ /**
41
+ * Where a field's or a column's choices come from when only the console can enumerate them: the
42
+ * station's own tables, the platform's zone list, the enabled plugins that can do one of four jobs,
43
+ * or the models the selected model plugin currently offers. Resolved by the console either way
44
+ * generated from [ConfigFieldOptionSource](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L35)
45
+ */
46
+ export type ConfigFieldOptionSource = 'station.newsCategories' | 'station.newsFeeds' | 'intl.timeZones' | 'plugins.speech' | 'plugins.llm' | 'plugins.mixer' | 'plugins.analysis' | 'llm.models';
47
+ /**
48
+ * A plugin handed over from the browser. The generated client types the body as `FormData`, so
49
+ * nothing checks this shape. It says what to send
50
+ * generated from [PluginImport](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L93)
51
+ */
52
+ export interface PluginImport {
53
+ /** The gzip tarball npm pack writes: every entry under package/, holding package.json and the built code, at most 64 MB */
54
+ file: Blob;
55
+ }
56
+ /**
57
+ * generated from [PluginLogLevel](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L104)
58
+ */
59
+ export type PluginLogLevel = 'debug' | 'info' | 'warn' | 'error';
60
+ /**
61
+ * A submitted settings form. Secret values arrive in here and are never echoed back
62
+ * generated from [PluginConfigInput](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L136)
63
+ */
64
+ export interface PluginConfigInput {
65
+ config: Record<string, unknown>;
66
+ }
67
+ /**
68
+ * What a plugin may do with a capability it asked for. Denied is the default and needs no row: a
69
+ * capability is refused until somebody allows it, so "never answered" and "refused" are one state
70
+ * generated from [GrantDecision](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L142)
71
+ */
72
+ export type GrantDecision = 'allowed' | 'denied';
73
+ /**
74
+ * Outcome of the plugin's own `testConnection()`
75
+ * generated from [PluginTestResult](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L166)
76
+ */
77
+ export interface PluginTestResult {
78
+ ok: boolean;
79
+ message?: string;
80
+ }
81
+ /**
82
+ * Where the console should send the browser to obtain the operator's consent. Reported rather than
83
+ * redirected to: the route is behind the Bearer floor, so a browser cannot follow a redirect from it
84
+ * generated from [PluginOAuthStart](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L184)
85
+ */
86
+ export interface PluginOAuthStart {
87
+ url: string;
88
+ }
89
+ /**
90
+ * Outcome of an OAuth callback
91
+ * generated from [PluginOAuthResult](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L189)
92
+ */
93
+ export interface PluginOAuthResult {
94
+ pluginId: string;
95
+ ok: boolean;
96
+ message?: string;
97
+ }
98
+ /**
99
+ * generated from [PluginOAuthCallbackQuery](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L195)
100
+ */
101
+ export interface PluginOAuthCallbackQuery {
102
+ code?: string;
103
+ state?: string;
104
+ error?: string;
105
+ ubi?: string;
106
+ /**
107
+ * What a desktop-style flow returns instead of `code`: the provider mints a token before the
108
+ * consent screen and hands the same one back, which the plugin exchanges for a session. Last.fm's
109
+ * auth works this way. Listed here because the route parses this query strictly, so an
110
+ * undeclared parameter is a 400 before any plugin code runs
111
+ */
112
+ token?: string;
113
+ }
114
+ /**
115
+ * Live choices for a plugin's config fields, keyed by field key, out of the plugin's own
116
+ * `suggestConfigOptions()`. What `ConfigFieldDescriptor.options` cannot be: fixed when the manifest
117
+ * was written, where these are whatever the operator's own server currently says
118
+ * generated from [PluginFieldSuggestions](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L174)
119
+ */
120
+ export interface PluginFieldSuggestions {
121
+ /** Keys the plugin had nothing to say about are simply absent, rather than present and empty */
122
+ fields: Record<string, ConfigFieldOption[]>;
123
+ /**
124
+ * False when the plugin does not implement suggestions at all, so a console can tell "nothing to
125
+ * suggest" from "asked and got nothing", and draw a refresh control only where one would do something
126
+ */
127
+ supported: boolean;
128
+ }
129
+ /**
130
+ * One column of a `list` field. Every ordinary cell is stored as a string in the row, so this describes the
131
+ * control rather than the value; a `secret` cell is encrypted on its own and is never in the row at all
132
+ * generated from [ConfigFieldColumn](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L39)
133
+ */
134
+ export interface ConfigFieldColumn {
135
+ key: string;
136
+ label: string;
137
+ type: 'string' | 'url' | 'select' | 'secret';
138
+ required?: boolean;
139
+ placeholder?: string;
140
+ options?: ConfigFieldOption[];
141
+ optionsFrom?: ConfigFieldOptionSource;
142
+ /** Key of another column in the same list. This cell applies only to a row whose cell there holds one of `dependsOnValues`. Stronger than a field's `dependsOn`, which only hides a control: a cell that does not apply is neither sent by the console nor read by the host, so a `url` column that does not apply to a row contributes no hostname to the plugin's allowlist. A target this list does not declare, or a target cell still empty, shows the cell */
143
+ dependsOn?: string;
144
+ /** The values of the `dependsOn` cell this one applies to. Omitted means any non-empty value; ignored without a target */
145
+ dependsOnValues?: string[];
146
+ }
147
+ /**
148
+ * generated from [PluginLogEntry](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L106)
149
+ */
150
+ export interface PluginLogEntry {
151
+ ts: string;
152
+ level: PluginLogLevel;
153
+ /** Must match MAX_LINE_BYTES_CEILING in apps/api/src/logging/rotating.log.store.ts. Change both together */
154
+ text: string;
155
+ }
156
+ /**
157
+ * generated from [PluginLogQuery](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L118)
158
+ */
159
+ export interface PluginLogQuery {
160
+ limit?: number;
161
+ level?: PluginLogLevel;
162
+ }
163
+ /**
164
+ * generated from [PluginLogLevelInput](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L123)
165
+ */
166
+ export interface PluginLogLevelInput {
167
+ level: PluginLogLevel;
168
+ }
169
+ /**
170
+ * One capability a plugin asked for, with the station's answer. The ask is the plugin's manifest and
171
+ * the answer is a row, so a plugin that stops asking stops appearing here whatever was stored
172
+ * generated from [PluginGrant](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L146)
173
+ */
174
+ export interface PluginGrant {
175
+ pluginId: string;
176
+ pluginName: string;
177
+ /** The host's own id for it, e.g. `network.open` */
178
+ capability: string;
179
+ /** What the host calls the capability */
180
+ label: string;
181
+ /** What allowing it opens up, in the station's words */
182
+ describes: string;
183
+ /** Why this plugin says it needs it, in the plugin's words */
184
+ reason: string;
185
+ decision: GrantDecision;
186
+ }
187
+ /**
188
+ * generated from [PluginGrantInput](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L160)
189
+ */
190
+ export interface PluginGrantInput {
191
+ capability: string;
192
+ decision: GrantDecision;
193
+ }
194
+ /**
195
+ * Mirrors the plugin SDK's `ConfigField`: enough for a console to render the settings form with no per-plugin code
196
+ * generated from [ConfigFieldDescriptor](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L52)
197
+ */
198
+ export interface ConfigFieldDescriptor {
199
+ key: string;
200
+ label: string;
201
+ type: ConfigFieldType;
202
+ required?: boolean;
203
+ default?: string | number | boolean;
204
+ /** `number` only, and ignored elsewhere */
205
+ unit?: ConfigFieldUnit;
206
+ /** `slider` for a `number` with both `min` and `max`, `tags` for a `string` holding a comma-separated set */
207
+ control?: ConfigFieldControl;
208
+ /** How coarsely a `control` moves, in the field's own unit. Ignored without one, and defaults to 1 */
209
+ step?: number;
210
+ /** `number` only: the smallest value that will be accepted, inclusive */
211
+ min?: number;
212
+ /** `number` only: the largest value that will be accepted, inclusive */
213
+ max?: number;
214
+ placeholder?: string;
215
+ help?: string;
216
+ options?: ConfigFieldOption[];
217
+ /** Choices only the console can enumerate. Merged where a plugin's own suggestions are, and outranked by them */
218
+ optionsFrom?: ConfigFieldOptionSource;
219
+ /** `list` only, and ignored elsewhere */
220
+ columns?: ConfigFieldColumn[];
221
+ /** Key of the field this one is only relevant to */
222
+ dependsOn?: string;
223
+ /** Key of the `number` field that is the upper end of the range this one opens, declared on the lower end only. Still two settings, each validated by name; the console draws them as one control whose handles cannot cross */
224
+ rangeWith?: string;
225
+ }
226
+ /**
227
+ * generated from [PluginLogPage](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L112)
228
+ */
229
+ export interface PluginLogPage {
230
+ pluginId: string;
231
+ level: PluginLogLevel;
232
+ /** Newest first, as the activity feed and the script history send. The download is the file as written, oldest first */
233
+ entries: PluginLogEntry[];
234
+ }
235
+ /**
236
+ * generated from [PluginGrantList](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L156)
237
+ */
238
+ export interface PluginGrantList {
239
+ /** Every capability every installed plugin is asking for, refused ones included */
240
+ grants: PluginGrant[];
241
+ }
242
+ /**
243
+ * A plugin as the settings list sees it. Carries no configured VALUES, only which secrets are set
244
+ * generated from [PluginSummary](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L73)
245
+ */
246
+ export interface PluginSummary {
247
+ id: string;
248
+ name: string;
249
+ version: string;
250
+ capabilities: string[];
251
+ /** Whether the manifest declares the `trackFetcher` permission, so its records reach air through the station's own track fetcher and that fetcher needs its own authorization. Not the same as the `stream` capability, which a plugin that mints its own stream URLs declares too. Absent means it does not */
252
+ usesTrackFetcher?: boolean;
253
+ status: PluginStatus;
254
+ origin: PluginOrigin;
255
+ enabled: boolean;
256
+ description?: string;
257
+ icon?: string;
258
+ configFields: ConfigFieldDescriptor[];
259
+ /** Whether a value is currently stored, per `secret` field under its own key and per `secret` cell under `field/rowId/column`. Never the value itself */
260
+ secretsConfigured: Record<string, boolean>;
261
+ /** When this plugin was first ever enabled. Absent means it never has been, so the console asks before it is */
262
+ firstEnabledAt?: DateTime;
263
+ /** The last recorded failure. Absent means it is not currently unhappy */
264
+ lastError?: string;
265
+ /** When the breaker will probe this plugin again on its own. Absent means no probe is pending */
266
+ nextProbeAt?: DateTime;
267
+ }
268
+ export interface PluginSummaryInput {
269
+ id: string;
270
+ name: string;
271
+ version: string;
272
+ capabilities: string[];
273
+ /** Whether the manifest declares the `trackFetcher` permission, so its records reach air through the station's own track fetcher and that fetcher needs its own authorization. Not the same as the `stream` capability, which a plugin that mints its own stream URLs declares too. Absent means it does not */
274
+ usesTrackFetcher?: boolean;
275
+ status: PluginStatus;
276
+ origin: PluginOrigin;
277
+ enabled: boolean;
278
+ description?: string;
279
+ icon?: string;
280
+ configFields: ConfigFieldDescriptor[];
281
+ /** Whether a value is currently stored, per `secret` field under its own key and per `secret` cell under `field/rowId/column`. Never the value itself */
282
+ secretsConfigured: Record<string, boolean>;
283
+ /** The last recorded failure. Absent means it is not currently unhappy */
284
+ lastError?: string;
285
+ }
286
+ /** Rehydrates every wire-encoded scalar in a PluginSummary into its runtime type. Mutates and returns `raw`. */
287
+ export declare function revivePluginSummary(raw: PluginSummary): PluginSummary;
288
+ /**
289
+ * What an import did
290
+ * generated from [PluginImportResult](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L98)
291
+ */
292
+ export interface PluginImportResult {
293
+ /** The id the imported plugin claimed */
294
+ pluginId: string;
295
+ /** The same version was already loaded, so the station runs the build it had until it restarts. False for a new plugin and for a new version */
296
+ restartRequired: boolean;
297
+ /** Every plugin, as the catalogue now stands. An import can take an older version away as well as add one */
298
+ plugins: PluginSummary[];
299
+ }
300
+ export interface PluginImportResultInput {
301
+ /** The id the imported plugin claimed */
302
+ pluginId: string;
303
+ /** The same version was already loaded, so the station runs the build it had until it restarts. False for a new plugin and for a new version */
304
+ restartRequired: boolean;
305
+ /** Every plugin, as the catalogue now stands. An import can take an older version away as well as add one */
306
+ plugins: PluginSummaryInput[];
307
+ }
308
+ /** Rehydrates every wire-encoded scalar in a PluginImportResult into its runtime type. Mutates and returns `raw`. */
309
+ export declare function revivePluginImportResult(raw: PluginImportResult): PluginImportResult;
310
+ /**
311
+ * A summary plus the stored NON-SECRET configuration
312
+ * generated from [PluginDetail](../../../../../apps/api/data/contracts/plugins/plugins.types.ck#L128)
313
+ */
314
+ export interface PluginDetail extends PluginSummary {
315
+ /** Absolute path of the plugin's directory on the station */
316
+ dir: string;
317
+ config: Record<string, unknown>;
318
+ oauthConnected?: boolean;
319
+ logLevel: PluginLogLevel;
320
+ }
321
+ export interface PluginDetailInput extends PluginSummaryInput {
322
+ /** Absolute path of the plugin's directory on the station */
323
+ dir: string;
324
+ config: Record<string, unknown>;
325
+ oauthConnected?: boolean;
326
+ logLevel: PluginLogLevel;
327
+ }
328
+ /** Rehydrates every wire-encoded scalar in a PluginDetail into its runtime type. Mutates and returns `raw`. */
329
+ export declare function revivePluginDetail(raw: PluginDetail): PluginDetail;
330
+ //# sourceMappingURL=plugins.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types/plugins.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SdkFetch } from '../sdk-options.js';
2
+ import type { Production, ProductionList, ProductionRequest } from './types/productions.types.js';
3
+ export declare class ProductionsClient {
4
+ private fetch;
5
+ constructor(fetch: SdkFetch);
6
+ /**
7
+ * @name List productions
8
+ * @description Everything the station has made or is making, newest first
9
+ */
10
+ listProductions(): Promise<ProductionList>;
11
+ /**
12
+ * @name Request production
13
+ * @description Asks the station to make one. It is queued, not started
14
+ */
15
+ requestProduction(body: ProductionRequest): Promise<Production>;
16
+ /**
17
+ * @name Cancel production
18
+ * @description Stops a production being made, for good
19
+ */
20
+ cancelProduction(id: string): Promise<Production>;
21
+ }
22
+ //# sourceMappingURL=productions.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"productions.client.d.ts","sourceRoot":"","sources":["../../src/productions/productions.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGlG,qBAAa,iBAAiB;IACd,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,QAAQ;IAEnC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAKhD;;;OAGG;IACG,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IASrE;;;OAGG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAI1D"}
@@ -0,0 +1,2 @@
1
+ export * from './productions.types.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/productions/types/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { DateTime } from 'luxon';
2
+ /**
3
+ * One person in a production: the presenter, or somebody cast to phone in. A snapshot rather than a
4
+ * reference, because the persona it names may be edited or deleted while the programme is still being
5
+ * made and what the turns were written as has to be what an operator reads back
6
+ * generated from [ProductionCastMember](../../../../../apps/api/data/contracts/productions/productions.types.ck#L10)
7
+ */
8
+ export interface ProductionCastMember {
9
+ role: 'host' | 'caller';
10
+ /** What they are called on air */
11
+ name?: string;
12
+ /** The persona key, for a link back to the character */
13
+ persona?: string;
14
+ }
15
+ /**
16
+ * What an operator asks for. Everything else about a production is decided by the passes that make it
17
+ * generated from [ProductionRequest](../../../../../apps/api/data/contracts/productions/productions.types.ck#L39)
18
+ */
19
+ export interface ProductionRequest {
20
+ kind?: string;
21
+ /** Absent is named after its kind and the moment it was asked for, which is what somebody taking a call now wants rather than a box to fill in */
22
+ title?: string;
23
+ brief?: string;
24
+ personaId?: string;
25
+ /** Absent takes the station's `render.productionWritingMode` */
26
+ writingMode?: 'quick' | 'outlined' | 'polished';
27
+ targetMs?: number;
28
+ scheduledFor?: DateTime;
29
+ }
30
+ /** Rehydrates every wire-encoded scalar in a ProductionRequest into its runtime type. Mutates and returns `raw`. */
31
+ export declare function reviveProductionRequest(raw: ProductionRequest): ProductionRequest;
32
+ /**
33
+ * Something the station makes rather than something it says: several beats of speech, written in several passes, that airs as one block
34
+ * generated from [Production](../../../../../apps/api/data/contracts/productions/productions.types.ck#L17)
35
+ */
36
+ export interface Production {
37
+ id: string;
38
+ /** What sort of production: podcast, bulletin, feature. Free text, so a station that wants a documentary strand needs no migration */
39
+ kind: string;
40
+ title: string;
41
+ /** What was asked for, in the operator's own words. Distinct from the title, which is only a label */
42
+ brief?: string;
43
+ /** Who presents it. Absent falls back to the station's active persona when a pass runs */
44
+ personaId?: string;
45
+ /** How many passes to spend on it */
46
+ writingMode: 'quick' | 'outlined' | 'polished';
47
+ /** How long it should run. What the beat count and the per-beat word budgets are computed from */
48
+ targetMs: number;
49
+ /** `stitching` is the beats being joined into one piece of audio, and it leads to `ready` whether that worked or not */
50
+ state: 'planned' | 'outlining' | 'drafting' | 'checking' | 'rendering' | 'stitching' | 'ready' | 'aired' | 'failed' | 'cancelled';
51
+ /** Why making it did not work */
52
+ error?: string;
53
+ /** When it should air. Absent means as soon as it is made */
54
+ scheduledFor?: DateTime;
55
+ cancelledAt?: DateTime;
56
+ /** How many beats exist so far, which is how far along the drafting is */
57
+ beats: number;
58
+ /** Who is on it, decided by the first pass that ran. Empty for one nobody has started, and for a programme the presenter reads alone */
59
+ cast: ProductionCastMember[];
60
+ createdAt: DateTime;
61
+ }
62
+ export interface ProductionInput {
63
+ /** What sort of production: podcast, bulletin, feature. Free text, so a station that wants a documentary strand needs no migration */
64
+ kind: string;
65
+ title: string;
66
+ /** What was asked for, in the operator's own words. Distinct from the title, which is only a label */
67
+ brief?: string;
68
+ /** Who presents it. Absent falls back to the station's active persona when a pass runs */
69
+ personaId?: string;
70
+ /** How many passes to spend on it */
71
+ writingMode: 'quick' | 'outlined' | 'polished';
72
+ /** How long it should run. What the beat count and the per-beat word budgets are computed from */
73
+ targetMs: number;
74
+ /** When it should air. Absent means as soon as it is made */
75
+ scheduledFor?: DateTime;
76
+ }
77
+ /** Rehydrates every wire-encoded scalar in a Production into its runtime type. Mutates and returns `raw`. */
78
+ export declare function reviveProduction(raw: Production): Production;
79
+ /**
80
+ * generated from [ProductionList](../../../../../apps/api/data/contracts/productions/productions.types.ck#L34)
81
+ */
82
+ export interface ProductionList {
83
+ productions: Production[];
84
+ }
85
+ export interface ProductionListInput {
86
+ productions: ProductionInput[];
87
+ }
88
+ /** Rehydrates every wire-encoded scalar in a ProductionList into its runtime type. Mutates and returns `raw`. */
89
+ export declare function reviveProductionList(raw: ProductionList): ProductionList;
90
+ //# sourceMappingURL=productions.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"productions.types.d.ts","sourceRoot":"","sources":["../../../src/productions/types/productions.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAYjC;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kJAAkJ;IAClJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAED,oHAAoH;AACpH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,CAMjF;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,sIAAsI;IACtI,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/C,kGAAkG;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,wHAAwH;IACxH,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IAClI,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,wIAAwI;IACxI,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC7B,SAAS,EAAE,QAAQ,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,sIAAsI;IACtI,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/C,kGAAkG;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAED,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAU5D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,eAAe,EAAE,CAAC;CAClC;AAED,iHAAiH;AACjH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CASxE"}