strapi-plugin-radiocult-uploader 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/admin/App-Cd-TZrqC.mjs +1179 -0
  4. package/dist/admin/App-DTOuR7aY.js +1199 -0
  5. package/dist/admin/Settings-B3cZR7VF.mjs +516 -0
  6. package/dist/admin/Settings-DHv9SmRU.js +534 -0
  7. package/dist/admin/en-CTCtUg23.mjs +8 -0
  8. package/dist/admin/en-D_61ojL7.js +8 -0
  9. package/dist/admin/index-BLAtUo_j.js +334 -0
  10. package/dist/admin/index-Dj3e3A79.mjs +318 -0
  11. package/dist/admin/index.js +4 -0
  12. package/dist/admin/index.mjs +4 -0
  13. package/dist/admin/src/api.d.ts +107 -0
  14. package/dist/admin/src/components/Initializer.d.ts +5 -0
  15. package/dist/admin/src/components/Panel.d.ts +18 -0
  16. package/dist/admin/src/components/PluginIcon.d.ts +2 -0
  17. package/dist/admin/src/index.d.ts +3 -0
  18. package/dist/admin/src/pages/App.d.ts +2 -0
  19. package/dist/admin/src/pages/HomePage.d.ts +6 -0
  20. package/dist/admin/src/pages/Settings.d.ts +8 -0
  21. package/dist/admin/src/pages/Uploader.d.ts +10 -0
  22. package/dist/admin/src/pluginId.d.ts +1 -0
  23. package/dist/admin/src/theme/tokens.d.ts +96 -0
  24. package/dist/admin/src/utils/getTranslation.d.ts +2 -0
  25. package/dist/admin/tokens-ACCekCH6.mjs +161 -0
  26. package/dist/admin/tokens-CDeNcvZq.js +178 -0
  27. package/dist/server/index.js +1193 -0
  28. package/dist/server/index.mjs +1165 -0
  29. package/dist/server/src/bootstrap.d.ts +5 -0
  30. package/dist/server/src/config/index.d.ts +17 -0
  31. package/dist/server/src/content-types/index.d.ts +51 -0
  32. package/dist/server/src/content-types/track-record/schema.json.d.ts +29 -0
  33. package/dist/server/src/controllers/index.d.ts +21 -0
  34. package/dist/server/src/controllers/settings.d.ts +16 -0
  35. package/dist/server/src/controllers/uploader.d.ts +10 -0
  36. package/dist/server/src/controllers/utils.d.ts +16 -0
  37. package/dist/server/src/destroy.d.ts +5 -0
  38. package/dist/server/src/index.d.ts +267 -0
  39. package/dist/server/src/middlewares/index.d.ts +2 -0
  40. package/dist/server/src/policies/index.d.ts +2 -0
  41. package/dist/server/src/register.d.ts +5 -0
  42. package/dist/server/src/routes/admin/index.d.ts +22 -0
  43. package/dist/server/src/routes/index.d.ts +19 -0
  44. package/dist/server/src/services/id3.d.ts +18 -0
  45. package/dist/server/src/services/index.d.ts +156 -0
  46. package/dist/server/src/services/mapping.d.ts +47 -0
  47. package/dist/server/src/services/radiocult.d.ts +115 -0
  48. package/dist/server/src/services/records.d.ts +25 -0
  49. package/dist/server/src/services/settings.d.ts +103 -0
  50. package/dist/server/src/utils/errors.d.ts +5 -0
  51. package/dist/server/src/utils/plugin.d.ts +4 -0
  52. package/logo.png +0 -0
  53. package/package.json +98 -0
  54. package/scripts/migrate-from-fields.mjs +78 -0
@@ -0,0 +1,5 @@
1
+ import { Core } from '@strapi/strapi';
2
+ declare const bootstrap: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => Promise<void>;
5
+ export default bootstrap;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Plugin config. Values set here (usually from env vars via the app's
3
+ * config/plugins.ts, or the defaults below which read the RADIOCULT_* env
4
+ * vars directly) override whatever is stored via the settings page — secrets
5
+ * managed at the hosting level always win.
6
+ */
7
+ declare const _default: {
8
+ default: ({ env }: {
9
+ env: (key: string, fallback?: unknown) => any;
10
+ }) => {
11
+ apiKey: any;
12
+ stationId: any;
13
+ enabled: any;
14
+ };
15
+ validator(): void;
16
+ };
17
+ export default _default;
@@ -0,0 +1,51 @@
1
+ declare const _default: {
2
+ 'track-record': {
3
+ schema: {
4
+ kind: string;
5
+ collectionName: string;
6
+ info: {
7
+ singularName: string;
8
+ pluralName: string;
9
+ displayName: string;
10
+ description: string;
11
+ };
12
+ options: {
13
+ draftAndPublish: boolean;
14
+ };
15
+ pluginOptions: {
16
+ "content-manager": {
17
+ visible: boolean;
18
+ };
19
+ "content-type-builder": {
20
+ visible: boolean;
21
+ };
22
+ };
23
+ attributes: {
24
+ contentTypeUid: {
25
+ type: string;
26
+ required: boolean;
27
+ };
28
+ entryDocumentId: {
29
+ type: string;
30
+ required: boolean;
31
+ };
32
+ trackId: {
33
+ type: string;
34
+ };
35
+ uploadedAt: {
36
+ type: string;
37
+ };
38
+ mixcloudRequestedAt: {
39
+ type: string;
40
+ };
41
+ soundcloudRequestedAt: {
42
+ type: string;
43
+ };
44
+ lastSyncedAt: {
45
+ type: string;
46
+ };
47
+ };
48
+ };
49
+ };
50
+ };
51
+ export default _default;
@@ -0,0 +1,29 @@
1
+ declare const _default: {
2
+ "kind": "collectionType",
3
+ "collectionName": "radiocult_track_records",
4
+ "info": {
5
+ "singularName": "track-record",
6
+ "pluralName": "track-records",
7
+ "displayName": "Radio Cult Track Record",
8
+ "description": "Bookkeeping for tracks uploaded to Radio Cult (managed by the Radio Cult Uploader plugin)"
9
+ },
10
+ "options": {
11
+ "draftAndPublish": false
12
+ },
13
+ "pluginOptions": {
14
+ "content-manager": { "visible": false },
15
+ "content-type-builder": { "visible": false }
16
+ },
17
+ "attributes": {
18
+ "contentTypeUid": { "type": "string", "required": true },
19
+ "entryDocumentId": { "type": "string", "required": true },
20
+ "trackId": { "type": "string" },
21
+ "uploadedAt": { "type": "datetime" },
22
+ "mixcloudRequestedAt": { "type": "datetime" },
23
+ "soundcloudRequestedAt": { "type": "datetime" },
24
+ "lastSyncedAt": { "type": "datetime" }
25
+ }
26
+ }
27
+ ;
28
+
29
+ export default _default;
@@ -0,0 +1,21 @@
1
+ declare const _default: {
2
+ uploader: ({ strapi }: {
3
+ strapi: import('@strapi/types/dist/core').Strapi;
4
+ }) => {
5
+ upload: (ctx: any) => Promise<void>;
6
+ publish: (ctx: any) => Promise<void>;
7
+ updateTrack: (ctx: any) => Promise<void>;
8
+ status: (ctx: any) => Promise<void>;
9
+ };
10
+ settings: ({ strapi }: {
11
+ strapi: import('@strapi/types/dist/core').Strapi;
12
+ }) => {
13
+ get: (ctx: any) => Promise<void>;
14
+ update: (ctx: any) => Promise<void>;
15
+ testConnection: (ctx: any) => Promise<void>;
16
+ uiConfig: (ctx: any) => Promise<void>;
17
+ contentTypes: (ctx: any) => Promise<void>;
18
+ diagnostics: (ctx: any) => Promise<void>;
19
+ };
20
+ };
21
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import { Core } from '@strapi/strapi';
2
+ declare const _default: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ get: (ctx: any) => Promise<void>;
6
+ update: (ctx: any) => Promise<void>;
7
+ testConnection: (ctx: any) => Promise<void>;
8
+ /**
9
+ * Theme + mapped content type — readable by any admin (the uploader page
10
+ * needs the theme, the edit-view side panel needs the content type).
11
+ */
12
+ uiConfig: (ctx: any) => Promise<void>;
13
+ contentTypes: (ctx: any) => Promise<void>;
14
+ diagnostics: (ctx: any) => Promise<void>;
15
+ };
16
+ export default _default;
@@ -0,0 +1,10 @@
1
+ import { Core } from '@strapi/strapi';
2
+ declare const _default: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => {
5
+ upload: (ctx: any) => Promise<void>;
6
+ publish: (ctx: any) => Promise<void>;
7
+ updateTrack: (ctx: any) => Promise<void>;
8
+ status: (ctx: any) => Promise<void>;
9
+ };
10
+ export default _default;
@@ -0,0 +1,16 @@
1
+ type Handler = (ctx: any) => Promise<unknown>;
2
+ /**
3
+ * Wraps a handler with error → HTTP response mapping and detailed logging:
4
+ * every failure is logged with method, path, admin user and status; 5xx also
5
+ * get the stack trace.
6
+ */
7
+ export declare const respond: (fn: Handler) => (ctx: any) => Promise<void>;
8
+ /** Edited-details fields, from either a multipart or a JSON body. */
9
+ export declare const metaFrom: (body: any) => {
10
+ title: any;
11
+ artist: any;
12
+ album: any;
13
+ description: any;
14
+ tags: any;
15
+ };
16
+ export {};
@@ -0,0 +1,5 @@
1
+ import { Core } from '@strapi/strapi';
2
+ declare const destroy: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => void;
5
+ export default destroy;
@@ -0,0 +1,267 @@
1
+ declare const _default: {
2
+ register: ({ strapi }: {
3
+ strapi: import('@strapi/types/dist/core').Strapi;
4
+ }) => void;
5
+ bootstrap: ({ strapi }: {
6
+ strapi: import('@strapi/types/dist/core').Strapi;
7
+ }) => Promise<void>;
8
+ destroy: ({ strapi }: {
9
+ strapi: import('@strapi/types/dist/core').Strapi;
10
+ }) => void;
11
+ config: {
12
+ default: ({ env }: {
13
+ env: (key: string, fallback?: unknown) => any;
14
+ }) => {
15
+ apiKey: any;
16
+ stationId: any;
17
+ enabled: any;
18
+ };
19
+ validator(): void;
20
+ };
21
+ controllers: {
22
+ uploader: ({ strapi }: {
23
+ strapi: import('@strapi/types/dist/core').Strapi;
24
+ }) => {
25
+ upload: (ctx: any) => Promise<void>;
26
+ publish: (ctx: any) => Promise<void>;
27
+ updateTrack: (ctx: any) => Promise<void>;
28
+ status: (ctx: any) => Promise<void>;
29
+ };
30
+ settings: ({ strapi }: {
31
+ strapi: import('@strapi/types/dist/core').Strapi;
32
+ }) => {
33
+ get: (ctx: any) => Promise<void>;
34
+ update: (ctx: any) => Promise<void>;
35
+ testConnection: (ctx: any) => Promise<void>;
36
+ uiConfig: (ctx: any) => Promise<void>;
37
+ contentTypes: (ctx: any) => Promise<void>;
38
+ diagnostics: (ctx: any) => Promise<void>;
39
+ };
40
+ };
41
+ routes: {
42
+ admin: {
43
+ type: string;
44
+ routes: {
45
+ method: string;
46
+ path: string;
47
+ handler: string;
48
+ config: {
49
+ policies: {
50
+ name: string;
51
+ config: {
52
+ actions: string[];
53
+ };
54
+ }[];
55
+ };
56
+ }[];
57
+ };
58
+ };
59
+ services: {
60
+ settings: ({ strapi }: {
61
+ strapi: import('@strapi/types/dist/core').Strapi;
62
+ }) => {
63
+ store(): {
64
+ get(params?: Partial<{
65
+ key: string;
66
+ type?: string;
67
+ environment?: string;
68
+ name?: string;
69
+ tag?: string;
70
+ }>): Promise<unknown>;
71
+ set(params?: Partial<{
72
+ key: string;
73
+ value: unknown;
74
+ type?: string;
75
+ environment?: string;
76
+ name?: string;
77
+ tag?: string;
78
+ }>): Promise<void>;
79
+ delete(params?: Partial<{
80
+ key: string;
81
+ type?: string;
82
+ environment?: string;
83
+ name?: string;
84
+ tag?: string;
85
+ }>): Promise<void>;
86
+ };
87
+ get(): Promise<import('./services/settings').PluginSettings>;
88
+ envLocks(): {
89
+ apiKey: boolean;
90
+ stationId: boolean;
91
+ enabled: boolean;
92
+ };
93
+ credentials(): Promise<{
94
+ apiKey: string;
95
+ stationId: string;
96
+ enabled: boolean;
97
+ }>;
98
+ validateMapping(mapping: import('./services/settings').FieldMap): void;
99
+ update(patch: Partial<import('./services/settings').PluginSettings>): Promise<import('./services/settings').PluginSettings>;
100
+ testConnection(): Promise<{
101
+ ok: boolean;
102
+ message: string;
103
+ }>;
104
+ };
105
+ mapping: ({ strapi }: {
106
+ strapi: import('@strapi/types/dist/core').Strapi;
107
+ }) => {
108
+ settings(): import('@strapi/types/dist/core').Service;
109
+ mapping(): Promise<import('./services/settings').FieldMap>;
110
+ requireMapping(): Promise<import('./services/settings').FieldMap>;
111
+ populateFor(mapping: import('./services/settings').FieldMap): Record<string, true>;
112
+ normalise(mapping: import('./services/settings').FieldMap, entry: any): import('./services/mapping').NormalisedEntry;
113
+ loadEntry(documentId: string): Promise<import('./services/mapping').NormalisedEntry>;
114
+ writeLinks(documentId: string, links: Partial<Record<import('./utils/plugin').Platform, string>>): Promise<string[]>;
115
+ listContentTypes(): {
116
+ uid: string;
117
+ displayName: any;
118
+ attributes: {
119
+ name: string;
120
+ type: any;
121
+ target: any;
122
+ targetAttributes: string[];
123
+ }[];
124
+ }[];
125
+ };
126
+ records: ({ strapi }: {
127
+ strapi: import('@strapi/types/dist/core').Strapi;
128
+ }) => {
129
+ find(contentTypeUid: string, entryDocumentId: string): Promise<import('./services/records').TrackRecord | null>;
130
+ upsert(contentTypeUid: string, entryDocumentId: string, data: Partial<import('./services/records').TrackRecord>): Promise<import('./services/records').TrackRecord>;
131
+ findUploaded(contentTypeUid: string, entryDocumentIds?: string[]): Promise<import('./services/records').TrackRecord[]>;
132
+ };
133
+ radiocult: ({ strapi }: {
134
+ strapi: import('@strapi/types/dist/core').Strapi;
135
+ }) => {
136
+ uploadTrack({ documentId, file, force, meta, }: {
137
+ documentId: string;
138
+ file: any;
139
+ force: boolean;
140
+ meta?: {
141
+ title?: string;
142
+ artist?: string;
143
+ album?: string;
144
+ };
145
+ }): Promise<{
146
+ trackId: any;
147
+ warnings: string[];
148
+ }>;
149
+ publish({ documentId, platform, force, meta, }: {
150
+ documentId: string;
151
+ platform: string;
152
+ force: boolean;
153
+ meta?: {
154
+ title?: string;
155
+ tags?: unknown;
156
+ description?: string;
157
+ };
158
+ }): Promise<{
159
+ requestedAt: string;
160
+ }>;
161
+ syncLinks({ documentIds, bypassCache, }?: {
162
+ documentIds?: string[];
163
+ bypassCache?: boolean;
164
+ }): Promise<{
165
+ updated: number;
166
+ pending: number;
167
+ }>;
168
+ getStatus(documentId: string, { refresh }?: {
169
+ refresh?: boolean;
170
+ }): Promise<{
171
+ enabled: boolean;
172
+ trackId: any;
173
+ uploadedAt: any;
174
+ platforms: {
175
+ mixcloud: {
176
+ state: "not_published" | "publishing" | "linked" | "stalled";
177
+ requestedAt: string;
178
+ link: string;
179
+ };
180
+ soundcloud: {
181
+ state: "not_published" | "publishing" | "linked" | "stalled";
182
+ requestedAt: string;
183
+ link: string;
184
+ };
185
+ };
186
+ rateLimitMessage: string;
187
+ details: {
188
+ title: any;
189
+ showName: any;
190
+ artist: any;
191
+ album: string;
192
+ description: any;
193
+ genres: any;
194
+ image: {
195
+ name: any;
196
+ previewUrl: any;
197
+ usable: boolean;
198
+ };
199
+ };
200
+ }>;
201
+ updateTrackMetadata({ documentId, meta, }: {
202
+ documentId: string;
203
+ meta: {
204
+ title?: string;
205
+ artist?: string;
206
+ album?: string;
207
+ };
208
+ }): Promise<{
209
+ updated: string[];
210
+ }>;
211
+ maybeSyncTitle(event: any): Promise<void>;
212
+ };
213
+ };
214
+ contentTypes: {
215
+ 'track-record': {
216
+ schema: {
217
+ kind: string;
218
+ collectionName: string;
219
+ info: {
220
+ singularName: string;
221
+ pluralName: string;
222
+ displayName: string;
223
+ description: string;
224
+ };
225
+ options: {
226
+ draftAndPublish: boolean;
227
+ };
228
+ pluginOptions: {
229
+ "content-manager": {
230
+ visible: boolean;
231
+ };
232
+ "content-type-builder": {
233
+ visible: boolean;
234
+ };
235
+ };
236
+ attributes: {
237
+ contentTypeUid: {
238
+ type: string;
239
+ required: boolean;
240
+ };
241
+ entryDocumentId: {
242
+ type: string;
243
+ required: boolean;
244
+ };
245
+ trackId: {
246
+ type: string;
247
+ };
248
+ uploadedAt: {
249
+ type: string;
250
+ };
251
+ mixcloudRequestedAt: {
252
+ type: string;
253
+ };
254
+ soundcloudRequestedAt: {
255
+ type: string;
256
+ };
257
+ lastSyncedAt: {
258
+ type: string;
259
+ };
260
+ };
261
+ };
262
+ };
263
+ };
264
+ policies: {};
265
+ middlewares: {};
266
+ };
267
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: {};
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { Core } from '@strapi/strapi';
2
+ declare const register: ({ strapi }: {
3
+ strapi: Core.Strapi;
4
+ }) => void;
5
+ export default register;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Admin-typed routes: Strapi requires a valid admin session (Bearer JWT) on
3
+ * every call, and plugin routes are mounted under /radiocult-uploader.
4
+ * Settings routes additionally require the plugin's settings permission.
5
+ */
6
+ declare const _default: {
7
+ type: string;
8
+ routes: {
9
+ method: string;
10
+ path: string;
11
+ handler: string;
12
+ config: {
13
+ policies: {
14
+ name: string;
15
+ config: {
16
+ actions: string[];
17
+ };
18
+ }[];
19
+ };
20
+ }[];
21
+ };
22
+ export default _default;
@@ -0,0 +1,19 @@
1
+ declare const _default: {
2
+ admin: {
3
+ type: string;
4
+ routes: {
5
+ method: string;
6
+ path: string;
7
+ handler: string;
8
+ config: {
9
+ policies: {
10
+ name: string;
11
+ config: {
12
+ actions: string[];
13
+ };
14
+ }[];
15
+ };
16
+ }[];
17
+ };
18
+ };
19
+ export default _default;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Embeds artwork into an mp3's ID3v2 tag without loading the audio into
3
+ * memory. Radio Cult has no artwork API — it only reads the art embedded in
4
+ * the uploaded file — so this runs on every mp3 upload that has an episode
5
+ * image. Any existing ID3v2 tag is replaced (audio frames are untouched).
6
+ */
7
+ /**
8
+ * Writes a copy of `srcPath` with a fresh ID3v2 tag (title + front-cover
9
+ * artwork) into the OS temp dir and returns the new file's path. The caller
10
+ * is responsible for deleting the returned file.
11
+ */
12
+ export declare function embedArtworkMp3(srcPath: string, opts: {
13
+ title: string;
14
+ artist: string;
15
+ album: string;
16
+ imageBuffer: Buffer;
17
+ imageMime: string;
18
+ }): Promise<string>;
@@ -0,0 +1,156 @@
1
+ declare const _default: {
2
+ settings: ({ strapi }: {
3
+ strapi: import('@strapi/types/dist/core').Strapi;
4
+ }) => {
5
+ store(): {
6
+ get(params?: Partial<{
7
+ key: string;
8
+ type?: string;
9
+ environment?: string;
10
+ name?: string;
11
+ tag?: string;
12
+ }>): Promise<unknown>;
13
+ set(params?: Partial<{
14
+ key: string;
15
+ value: unknown;
16
+ type?: string;
17
+ environment?: string;
18
+ name?: string;
19
+ tag?: string;
20
+ }>): Promise<void>;
21
+ delete(params?: Partial<{
22
+ key: string;
23
+ type?: string;
24
+ environment?: string;
25
+ name?: string;
26
+ tag?: string;
27
+ }>): Promise<void>;
28
+ };
29
+ get(): Promise<import('./settings').PluginSettings>;
30
+ envLocks(): {
31
+ apiKey: boolean;
32
+ stationId: boolean;
33
+ enabled: boolean;
34
+ };
35
+ credentials(): Promise<{
36
+ apiKey: string;
37
+ stationId: string;
38
+ enabled: boolean;
39
+ }>;
40
+ validateMapping(mapping: import('./settings').FieldMap): void;
41
+ update(patch: Partial<import('./settings').PluginSettings>): Promise<import('./settings').PluginSettings>;
42
+ testConnection(): Promise<{
43
+ ok: boolean;
44
+ message: string;
45
+ }>;
46
+ };
47
+ mapping: ({ strapi }: {
48
+ strapi: import('@strapi/types/dist/core').Strapi;
49
+ }) => {
50
+ settings(): import('@strapi/types/dist/core').Service;
51
+ mapping(): Promise<import('./settings').FieldMap>;
52
+ requireMapping(): Promise<import('./settings').FieldMap>;
53
+ populateFor(mapping: import('./settings').FieldMap): Record<string, true>;
54
+ normalise(mapping: import('./settings').FieldMap, entry: any): import('./mapping').NormalisedEntry;
55
+ loadEntry(documentId: string): Promise<import('./mapping').NormalisedEntry>;
56
+ writeLinks(documentId: string, links: Partial<Record<import('../utils/plugin').Platform, string>>): Promise<string[]>;
57
+ listContentTypes(): {
58
+ uid: string;
59
+ displayName: any;
60
+ attributes: {
61
+ name: string;
62
+ type: any;
63
+ target: any;
64
+ targetAttributes: string[];
65
+ }[];
66
+ }[];
67
+ };
68
+ records: ({ strapi }: {
69
+ strapi: import('@strapi/types/dist/core').Strapi;
70
+ }) => {
71
+ find(contentTypeUid: string, entryDocumentId: string): Promise<import('./records').TrackRecord | null>;
72
+ upsert(contentTypeUid: string, entryDocumentId: string, data: Partial<import('./records').TrackRecord>): Promise<import('./records').TrackRecord>;
73
+ findUploaded(contentTypeUid: string, entryDocumentIds?: string[]): Promise<import('./records').TrackRecord[]>;
74
+ };
75
+ radiocult: ({ strapi }: {
76
+ strapi: import('@strapi/types/dist/core').Strapi;
77
+ }) => {
78
+ uploadTrack({ documentId, file, force, meta, }: {
79
+ documentId: string;
80
+ file: any;
81
+ force: boolean;
82
+ meta?: {
83
+ title?: string;
84
+ artist?: string;
85
+ album?: string;
86
+ };
87
+ }): Promise<{
88
+ trackId: any;
89
+ warnings: string[];
90
+ }>;
91
+ publish({ documentId, platform, force, meta, }: {
92
+ documentId: string;
93
+ platform: string;
94
+ force: boolean;
95
+ meta?: {
96
+ title?: string;
97
+ tags?: unknown;
98
+ description?: string;
99
+ };
100
+ }): Promise<{
101
+ requestedAt: string;
102
+ }>;
103
+ syncLinks({ documentIds, bypassCache, }?: {
104
+ documentIds?: string[];
105
+ bypassCache?: boolean;
106
+ }): Promise<{
107
+ updated: number;
108
+ pending: number;
109
+ }>;
110
+ getStatus(documentId: string, { refresh }?: {
111
+ refresh?: boolean;
112
+ }): Promise<{
113
+ enabled: boolean;
114
+ trackId: any;
115
+ uploadedAt: any;
116
+ platforms: {
117
+ mixcloud: {
118
+ state: "not_published" | "publishing" | "linked" | "stalled";
119
+ requestedAt: string;
120
+ link: string;
121
+ };
122
+ soundcloud: {
123
+ state: "not_published" | "publishing" | "linked" | "stalled";
124
+ requestedAt: string;
125
+ link: string;
126
+ };
127
+ };
128
+ rateLimitMessage: string;
129
+ details: {
130
+ title: any;
131
+ showName: any;
132
+ artist: any;
133
+ album: string;
134
+ description: any;
135
+ genres: any;
136
+ image: {
137
+ name: any;
138
+ previewUrl: any;
139
+ usable: boolean;
140
+ };
141
+ };
142
+ }>;
143
+ updateTrackMetadata({ documentId, meta, }: {
144
+ documentId: string;
145
+ meta: {
146
+ title?: string;
147
+ artist?: string;
148
+ album?: string;
149
+ };
150
+ }): Promise<{
151
+ updated: string[];
152
+ }>;
153
+ maybeSyncTitle(event: any): Promise<void>;
154
+ };
155
+ };
156
+ export default _default;