@dxos/plugin-youtube 0.8.3 → 0.8.4-main.74a063c4e0
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/dist/lib/browser/blueprints/index.mjs +49 -8
- package/dist/lib/browser/blueprints/index.mjs.map +4 -4
- package/dist/lib/browser/{chunk-C26XKDK2.mjs → chunk-FEQD5TPI.mjs} +4 -4
- package/dist/lib/browser/{chunk-C26XKDK2.mjs.map → chunk-FEQD5TPI.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-P67QEKBQ.mjs → chunk-GIRFSTHR.mjs} +6 -8
- package/dist/lib/browser/chunk-GIRFSTHR.mjs.map +7 -0
- package/dist/lib/browser/chunk-GTIWG45H.mjs +157 -0
- package/dist/lib/browser/chunk-GTIWG45H.mjs.map +7 -0
- package/dist/lib/browser/{clear-synced-videos-EVMJIZPD.mjs → clear-synced-videos-NZIWAVGL.mjs} +7 -8
- package/dist/lib/browser/clear-synced-videos-NZIWAVGL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +86 -81
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{sync-423Q4BDD.mjs → sync-T34US6NO.mjs} +18 -19
- package/dist/lib/browser/sync-T34US6NO.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -4
- package/dist/lib/node-esm/blueprints/index.mjs +49 -8
- package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-JSGRZMG3.mjs → chunk-A3SKNJFU.mjs} +6 -8
- package/dist/lib/node-esm/chunk-A3SKNJFU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JM5SBBP5.mjs → chunk-Q3TVMR5B.mjs} +4 -4
- package/dist/lib/node-esm/{chunk-JM5SBBP5.mjs.map → chunk-Q3TVMR5B.mjs.map} +2 -2
- package/dist/lib/node-esm/chunk-YOE54ALJ.mjs +158 -0
- package/dist/lib/node-esm/chunk-YOE54ALJ.mjs.map +7 -0
- package/dist/lib/node-esm/{clear-synced-videos-5UCH6XHL.mjs → clear-synced-videos-ZX7KBPGS.mjs} +7 -8
- package/dist/lib/{browser/clear-synced-videos-EVMJIZPD.mjs.map → node-esm/clear-synced-videos-ZX7KBPGS.mjs.map} +2 -2
- package/dist/lib/node-esm/index.mjs +86 -81
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{sync-CEF5DX2J.mjs → sync-RQYQ5LII.mjs} +18 -19
- package/dist/lib/node-esm/sync-RQYQ5LII.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -4
- package/dist/types/src/YouTubePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/migrations.d.ts +5 -0
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +1 -1
- package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelArticle/index.d.ts +1 -2
- package/dist/types/src/containers/ChannelArticle/index.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelSettings/index.d.ts +1 -2
- package/dist/types/src/containers/ChannelSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/VideoArticle/VideoArticle.d.ts +2 -7
- package/dist/types/src/containers/VideoArticle/VideoArticle.d.ts.map +1 -1
- package/dist/types/src/containers/VideoArticle/index.d.ts +1 -2
- package/dist/types/src/containers/VideoArticle/index.d.ts.map +1 -1
- package/dist/types/src/containers/VideoCard/VideoCard.d.ts +2 -2
- package/dist/types/src/containers/VideoCard/VideoCard.d.ts.map +1 -1
- package/dist/types/src/containers/VideoCard/index.d.ts +1 -2
- package/dist/types/src/containers/VideoCard/index.d.ts.map +1 -1
- package/dist/types/src/operations/apis/youtube/api.d.ts.map +1 -1
- package/dist/types/src/operations/clear-synced-videos.d.ts.map +1 -1
- package/dist/types/src/operations/definitions.d.ts +9 -5
- package/dist/types/src/operations/definitions.d.ts.map +1 -1
- package/dist/types/src/operations/sync.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +38 -38
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +28 -3
- package/dist/types/src/types/Channel.d.ts.map +1 -1
- package/dist/types/src/types/Video.d.ts +22 -0
- package/dist/types/src/types/Video.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -40
- package/src/YouTubePlugin.tsx +12 -6
- package/src/blueprints/youtube.ts +1 -1
- package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +29 -33
- package/src/capabilities/{blueprint-definition/blueprint-definition.ts → blueprint-definition.ts} +1 -1
- package/src/capabilities/index.ts +7 -4
- package/src/capabilities/migrations.ts +35 -0
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +16 -18
- package/src/containers/ChannelArticle/ChannelArticle.tsx +1 -1
- package/src/containers/ChannelArticle/index.ts +1 -3
- package/src/containers/ChannelSettings/index.ts +1 -3
- package/src/containers/VideoArticle/VideoArticle.tsx +2 -7
- package/src/containers/VideoArticle/index.ts +1 -3
- package/src/containers/VideoCard/VideoCard.tsx +2 -2
- package/src/containers/VideoCard/index.ts +1 -3
- package/src/operations/apis/youtube/api.ts +0 -1
- package/src/operations/clear-synced-videos.ts +0 -1
- package/src/operations/definitions.ts +3 -3
- package/src/operations/sync.ts +0 -1
- package/src/translations.ts +38 -38
- package/src/types/Channel.ts +18 -1
- package/src/types/Video.ts +25 -1
- package/dist/lib/browser/ChannelArticle-CDQR4BBY.mjs +0 -90
- package/dist/lib/browser/ChannelArticle-CDQR4BBY.mjs.map +0 -7
- package/dist/lib/browser/ChannelSettings-ZYUNW3VS.mjs +0 -28
- package/dist/lib/browser/ChannelSettings-ZYUNW3VS.mjs.map +0 -7
- package/dist/lib/browser/VideoArticle-FC4A6E7B.mjs +0 -76
- package/dist/lib/browser/VideoArticle-FC4A6E7B.mjs.map +0 -7
- package/dist/lib/browser/VideoCard-CCPXDCB7.mjs +0 -64
- package/dist/lib/browser/VideoCard-CCPXDCB7.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-MJY6A6SN.mjs +0 -195
- package/dist/lib/browser/app-graph-builder-MJY6A6SN.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-FRYUYJ22.mjs +0 -22
- package/dist/lib/browser/blueprint-definition-FRYUYJ22.mjs.map +0 -7
- package/dist/lib/browser/chunk-DFRSBBSO.mjs +0 -21
- package/dist/lib/browser/chunk-DFRSBBSO.mjs.map +0 -7
- package/dist/lib/browser/chunk-GFRR4TTX.mjs +0 -72
- package/dist/lib/browser/chunk-GFRR4TTX.mjs.map +0 -7
- package/dist/lib/browser/chunk-MUE22YUM.mjs +0 -57
- package/dist/lib/browser/chunk-MUE22YUM.mjs.map +0 -7
- package/dist/lib/browser/chunk-P67QEKBQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-YMDT37TA.mjs +0 -62
- package/dist/lib/browser/chunk-YMDT37TA.mjs.map +0 -7
- package/dist/lib/browser/chunk-Z3DGTMKC.mjs +0 -8
- package/dist/lib/browser/chunk-Z3DGTMKC.mjs.map +0 -7
- package/dist/lib/browser/react-surface-EDA5VYDC.mjs +0 -77
- package/dist/lib/browser/react-surface-EDA5VYDC.mjs.map +0 -7
- package/dist/lib/browser/sync-423Q4BDD.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelArticle-GQ64BO7V.mjs +0 -91
- package/dist/lib/node-esm/ChannelArticle-GQ64BO7V.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelSettings-DM2HWNKO.mjs +0 -29
- package/dist/lib/node-esm/ChannelSettings-DM2HWNKO.mjs.map +0 -7
- package/dist/lib/node-esm/VideoArticle-WLTWZO3K.mjs +0 -77
- package/dist/lib/node-esm/VideoArticle-WLTWZO3K.mjs.map +0 -7
- package/dist/lib/node-esm/VideoCard-FOWQZK75.mjs +0 -65
- package/dist/lib/node-esm/VideoCard-FOWQZK75.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-IU5TBAXN.mjs +0 -196
- package/dist/lib/node-esm/app-graph-builder-IU5TBAXN.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-W264MZ3D.mjs +0 -23
- package/dist/lib/node-esm/blueprint-definition-W264MZ3D.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5KNC2JMP.mjs +0 -58
- package/dist/lib/node-esm/chunk-5KNC2JMP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6BUJ2DQX.mjs +0 -73
- package/dist/lib/node-esm/chunk-6BUJ2DQX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CX6MV3QM.mjs +0 -23
- package/dist/lib/node-esm/chunk-CX6MV3QM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CZSLL3XQ.mjs +0 -63
- package/dist/lib/node-esm/chunk-CZSLL3XQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JSGRZMG3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-M4S6BE47.mjs +0 -10
- package/dist/lib/node-esm/chunk-M4S6BE47.mjs.map +0 -7
- package/dist/lib/node-esm/clear-synced-videos-5UCH6XHL.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-5DJAQPHJ.mjs +0 -78
- package/dist/lib/node-esm/react-surface-5DJAQPHJ.mjs.map +0 -7
- package/dist/lib/node-esm/sync-CEF5DX2J.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder/index.ts +0 -7
- package/src/capabilities/blueprint-definition/index.ts +0 -7
- package/src/capabilities/react-surface/index.ts +0 -7
- /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
- /package/dist/types/src/capabilities/{blueprint-definition/blueprint-definition.d.ts → blueprint-definition.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
__export
|
|
4
|
+
} from "./chunk-HSLMI22Q.mjs";
|
|
5
|
+
|
|
6
|
+
// src/types/types.ts
|
|
7
|
+
var YouTubeOperation = {};
|
|
8
|
+
|
|
9
|
+
// src/types/Channel.ts
|
|
10
|
+
var Channel_exports = {};
|
|
11
|
+
__export(Channel_exports, {
|
|
12
|
+
CreateYouTubeChannelSchema: () => CreateYouTubeChannelSchema,
|
|
13
|
+
LegacyYouTubeChannel: () => LegacyYouTubeChannel,
|
|
14
|
+
YouTubeChannel: () => YouTubeChannel,
|
|
15
|
+
instanceOf: () => instanceOf,
|
|
16
|
+
make: () => make
|
|
17
|
+
});
|
|
18
|
+
import * as Schema from "effect/Schema";
|
|
19
|
+
import { Annotation, Feed, Obj, Ref, Type } from "@dxos/echo";
|
|
20
|
+
import { FormInputAnnotation } from "@dxos/echo/internal";
|
|
21
|
+
import { FeedAnnotation } from "@dxos/schema";
|
|
22
|
+
import { AccessToken } from "@dxos/types";
|
|
23
|
+
var LegacyYouTubeChannel = Schema.Struct({
|
|
24
|
+
name: Schema.String.pipe(Schema.optional),
|
|
25
|
+
channelId: Schema.String.pipe(Schema.optional),
|
|
26
|
+
channelUrl: Schema.String.pipe(Schema.optional),
|
|
27
|
+
feed: Ref.Ref(Feed.Feed),
|
|
28
|
+
lastSyncedAt: Schema.String.pipe(Schema.optional),
|
|
29
|
+
accessToken: Schema.optional(Ref.Ref(AccessToken.AccessToken))
|
|
30
|
+
}).pipe(Type.object({
|
|
31
|
+
typename: "org.dxos.type.youtube-channel",
|
|
32
|
+
version: "0.1.0"
|
|
33
|
+
}));
|
|
34
|
+
var YouTubeChannel = Schema.Struct({
|
|
35
|
+
/** Display name for the channel. */
|
|
36
|
+
name: Schema.String.pipe(Schema.optional),
|
|
37
|
+
/** YouTube channel ID (e.g., UC...). */
|
|
38
|
+
channelId: Schema.String.pipe(Schema.optional),
|
|
39
|
+
/** YouTube channel URL or handle. */
|
|
40
|
+
channelUrl: Schema.String.pipe(Schema.optional),
|
|
41
|
+
/** Feed containing YouTubeVideo objects. */
|
|
42
|
+
feed: Ref.Ref(Feed.Feed).pipe(FormInputAnnotation.set(false)),
|
|
43
|
+
/** Last sync timestamp. */
|
|
44
|
+
lastSyncedAt: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
|
|
45
|
+
/** Google API credentials for fetching channel data. */
|
|
46
|
+
accessToken: Schema.optional(Ref.Ref(AccessToken.AccessToken).annotations({
|
|
47
|
+
title: "Account",
|
|
48
|
+
description: "Google account credentials for syncing this YouTube channel."
|
|
49
|
+
}))
|
|
50
|
+
}).pipe(Type.object({
|
|
51
|
+
typename: "org.dxos.type.youtubeChannel",
|
|
52
|
+
version: "0.1.0"
|
|
53
|
+
}), Annotation.IconAnnotation.set({
|
|
54
|
+
icon: "ph--youtube-logo--regular",
|
|
55
|
+
hue: "red"
|
|
56
|
+
}), FeedAnnotation.set(true));
|
|
57
|
+
var instanceOf = (value) => Obj.instanceOf(YouTubeChannel, value);
|
|
58
|
+
var CreateYouTubeChannelSchema = Schema.Struct({
|
|
59
|
+
name: Schema.optional(Schema.String.annotations({
|
|
60
|
+
title: "Name"
|
|
61
|
+
})),
|
|
62
|
+
channelUrl: Schema.optional(Schema.String.annotations({
|
|
63
|
+
title: "Channel URL",
|
|
64
|
+
description: "YouTube channel URL, handle (e.g., @channelname), or channel ID."
|
|
65
|
+
})),
|
|
66
|
+
accessToken: Schema.optional(Ref.Ref(AccessToken.AccessToken).annotations({
|
|
67
|
+
title: "Account",
|
|
68
|
+
description: "Google account credentials for syncing this YouTube channel."
|
|
69
|
+
}))
|
|
70
|
+
});
|
|
71
|
+
var make = (props = {}) => {
|
|
72
|
+
const feed = Feed.make();
|
|
73
|
+
const channel = Obj.make(YouTubeChannel, {
|
|
74
|
+
feed: Ref.make(feed),
|
|
75
|
+
...props
|
|
76
|
+
});
|
|
77
|
+
Obj.setParent(feed, channel);
|
|
78
|
+
return channel;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// src/types/Video.ts
|
|
82
|
+
var Video_exports = {};
|
|
83
|
+
__export(Video_exports, {
|
|
84
|
+
LegacyYouTubeVideo: () => LegacyYouTubeVideo,
|
|
85
|
+
TranscriptSegment: () => TranscriptSegment,
|
|
86
|
+
YouTubeVideo: () => YouTubeVideo,
|
|
87
|
+
instanceOf: () => instanceOf2
|
|
88
|
+
});
|
|
89
|
+
import * as Schema2 from "effect/Schema";
|
|
90
|
+
import { Annotation as Annotation2, Obj as Obj2, Type as Type2 } from "@dxos/echo";
|
|
91
|
+
var TranscriptSegment = Schema2.Struct({
|
|
92
|
+
/** Transcript text. */
|
|
93
|
+
text: Schema2.String,
|
|
94
|
+
/** Start time in seconds. */
|
|
95
|
+
offset: Schema2.Number,
|
|
96
|
+
/** Duration in seconds. */
|
|
97
|
+
duration: Schema2.Number
|
|
98
|
+
});
|
|
99
|
+
var LegacyYouTubeVideo = Schema2.Struct({
|
|
100
|
+
title: Schema2.String,
|
|
101
|
+
videoId: Schema2.String,
|
|
102
|
+
description: Schema2.String.pipe(Schema2.optional),
|
|
103
|
+
url: Schema2.String,
|
|
104
|
+
thumbnailUrl: Schema2.String.pipe(Schema2.optional),
|
|
105
|
+
channelTitle: Schema2.String.pipe(Schema2.optional),
|
|
106
|
+
publishedAt: Schema2.String,
|
|
107
|
+
duration: Schema2.String.pipe(Schema2.optional),
|
|
108
|
+
viewCount: Schema2.Number.pipe(Schema2.optional),
|
|
109
|
+
likeCount: Schema2.Number.pipe(Schema2.optional),
|
|
110
|
+
transcript: Schema2.String.pipe(Schema2.optional),
|
|
111
|
+
transcriptSegments: Schema2.Array(TranscriptSegment).pipe(Schema2.optional),
|
|
112
|
+
transcriptFetched: Schema2.Boolean.pipe(Schema2.optional)
|
|
113
|
+
}).pipe(Type2.object({
|
|
114
|
+
typename: "org.dxos.type.youtube-video",
|
|
115
|
+
version: "0.1.0"
|
|
116
|
+
}));
|
|
117
|
+
var YouTubeVideo = Schema2.Struct({
|
|
118
|
+
/** Video title. */
|
|
119
|
+
title: Schema2.String,
|
|
120
|
+
/** YouTube video ID. */
|
|
121
|
+
videoId: Schema2.String,
|
|
122
|
+
/** Video description. */
|
|
123
|
+
description: Schema2.String.pipe(Schema2.optional),
|
|
124
|
+
/** Video URL. */
|
|
125
|
+
url: Schema2.String,
|
|
126
|
+
/** Thumbnail URL. */
|
|
127
|
+
thumbnailUrl: Schema2.String.pipe(Schema2.optional),
|
|
128
|
+
/** Channel name. */
|
|
129
|
+
channelTitle: Schema2.String.pipe(Schema2.optional),
|
|
130
|
+
/** Published date as ISO string. */
|
|
131
|
+
publishedAt: Schema2.String,
|
|
132
|
+
/** Video duration in ISO 8601 format (e.g., PT1H30M15S). */
|
|
133
|
+
duration: Schema2.String.pipe(Schema2.optional),
|
|
134
|
+
/** View count. */
|
|
135
|
+
viewCount: Schema2.Number.pipe(Schema2.optional),
|
|
136
|
+
/** Like count. */
|
|
137
|
+
likeCount: Schema2.Number.pipe(Schema2.optional),
|
|
138
|
+
/** Full transcript text. */
|
|
139
|
+
transcript: Schema2.String.pipe(Schema2.optional),
|
|
140
|
+
/** Transcript segments with timestamps. */
|
|
141
|
+
transcriptSegments: Schema2.Array(TranscriptSegment).pipe(Schema2.optional),
|
|
142
|
+
/** True when transcript text was successfully loaded; false when disabled or none available. */
|
|
143
|
+
transcriptFetched: Schema2.Boolean.pipe(Schema2.optional)
|
|
144
|
+
}).pipe(Type2.object({
|
|
145
|
+
typename: "org.dxos.type.youtubeVideo",
|
|
146
|
+
version: "0.1.0"
|
|
147
|
+
}), Annotation2.IconAnnotation.set({
|
|
148
|
+
icon: "ph--play--regular",
|
|
149
|
+
hue: "red"
|
|
150
|
+
}));
|
|
151
|
+
var instanceOf2 = (value) => Obj2.instanceOf(YouTubeVideo, value);
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
YouTubeOperation,
|
|
155
|
+
Channel_exports,
|
|
156
|
+
Video_exports
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=chunk-YOE54ALJ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/types.ts", "../../../src/types/Channel.ts", "../../../src/types/Video.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * YouTube plugin operations (placeholder for future expansion).\n */\nexport const YouTubeOperation = {\n // Operations will be defined here when needed.\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Annotation, Feed, Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation } from '@dxos/echo/internal';\nimport { FeedAnnotation } from '@dxos/schema';\nimport { AccessToken } from '@dxos/types';\n\n// @import-as-namespace\n\n/** @deprecated Use YouTubeChannel instead. */\nexport const LegacyYouTubeChannel = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n channelId: Schema.String.pipe(Schema.optional),\n channelUrl: Schema.String.pipe(Schema.optional),\n feed: Ref.Ref(Feed.Feed),\n lastSyncedAt: Schema.String.pipe(Schema.optional),\n accessToken: Schema.optional(Ref.Ref(AccessToken.AccessToken)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.youtube-channel',\n version: '0.1.0',\n }),\n);\n\nexport interface LegacyYouTubeChannel extends Schema.Schema.Type<typeof LegacyYouTubeChannel> {}\n\n/**\n * YouTubeChannel schema representing a YouTube channel to sync videos from.\n */\nexport const YouTubeChannel = Schema.Struct({\n /** Display name for the channel. */\n name: Schema.String.pipe(Schema.optional),\n /** YouTube channel ID (e.g., UC...). */\n channelId: Schema.String.pipe(Schema.optional),\n /** YouTube channel URL or handle. */\n channelUrl: Schema.String.pipe(Schema.optional),\n /** Feed containing YouTubeVideo objects. */\n feed: Ref.Ref(Feed.Feed).pipe(FormInputAnnotation.set(false)),\n /** Last sync timestamp. */\n lastSyncedAt: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),\n /** Google API credentials for fetching channel data. */\n accessToken: Schema.optional(\n Ref.Ref(AccessToken.AccessToken).annotations({\n title: 'Account',\n description: 'Google account credentials for syncing this YouTube channel.',\n }),\n ),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.youtubeChannel',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--youtube-logo--regular',\n hue: 'red',\n }),\n FeedAnnotation.set(true),\n);\n\nexport interface YouTubeChannel extends Schema.Schema.Type<typeof YouTubeChannel> {}\n\n/** Checks if a value is a YouTubeChannel object. */\nexport const instanceOf = (value: unknown): value is YouTubeChannel => Obj.instanceOf(YouTubeChannel, value);\n\nexport const CreateYouTubeChannelSchema = Schema.Struct({\n name: Schema.optional(Schema.String.annotations({ title: 'Name' })),\n channelUrl: Schema.optional(\n Schema.String.annotations({\n title: 'Channel URL',\n description: 'YouTube channel URL, handle (e.g., @channelname), or channel ID.',\n }),\n ),\n accessToken: Schema.optional(\n Ref.Ref(AccessToken.AccessToken).annotations({\n title: 'Account',\n description: 'Google account credentials for syncing this YouTube channel.',\n }),\n ),\n});\nexport interface CreateYouTubeChannelSchema extends Schema.Schema.Type<typeof CreateYouTubeChannelSchema> {}\n\ntype YouTubeChannelProps = Omit<Obj.MakeProps<typeof YouTubeChannel>, 'feed' | 'lastSyncedAt'>;\n\n/** Creates a YouTubeChannel object with a backing feed. */\nexport const make = (props: YouTubeChannelProps = {}) => {\n const feed = Feed.make();\n const channel = Obj.make(YouTubeChannel, {\n feed: Ref.make(feed),\n ...props,\n });\n Obj.setParent(feed, channel);\n return channel;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Annotation, Obj, Type } from '@dxos/echo';\n\n/**\n * Transcript segment from a YouTube video.\n */\nexport const TranscriptSegment = Schema.Struct({\n /** Transcript text. */\n text: Schema.String,\n /** Start time in seconds. */\n offset: Schema.Number,\n /** Duration in seconds. */\n duration: Schema.Number,\n});\n\nexport type TranscriptSegment = Schema.Schema.Type<typeof TranscriptSegment>;\n\n/** @deprecated Use YouTubeVideo instead. */\nexport const LegacyYouTubeVideo = Schema.Struct({\n title: Schema.String,\n videoId: Schema.String,\n description: Schema.String.pipe(Schema.optional),\n url: Schema.String,\n thumbnailUrl: Schema.String.pipe(Schema.optional),\n channelTitle: Schema.String.pipe(Schema.optional),\n publishedAt: Schema.String,\n duration: Schema.String.pipe(Schema.optional),\n viewCount: Schema.Number.pipe(Schema.optional),\n likeCount: Schema.Number.pipe(Schema.optional),\n transcript: Schema.String.pipe(Schema.optional),\n transcriptSegments: Schema.Array(TranscriptSegment).pipe(Schema.optional),\n transcriptFetched: Schema.Boolean.pipe(Schema.optional),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.youtube-video',\n version: '0.1.0',\n }),\n);\n\nexport interface LegacyYouTubeVideo extends Schema.Schema.Type<typeof LegacyYouTubeVideo> {}\n\n/**\n * YouTubeVideo schema representing a video from a YouTube channel.\n */\nexport const YouTubeVideo = Schema.Struct({\n /** Video title. */\n title: Schema.String,\n /** YouTube video ID. */\n videoId: Schema.String,\n /** Video description. */\n description: Schema.String.pipe(Schema.optional),\n /** Video URL. */\n url: Schema.String,\n /** Thumbnail URL. */\n thumbnailUrl: Schema.String.pipe(Schema.optional),\n /** Channel name. */\n channelTitle: Schema.String.pipe(Schema.optional),\n /** Published date as ISO string. */\n publishedAt: Schema.String,\n /** Video duration in ISO 8601 format (e.g., PT1H30M15S). */\n duration: Schema.String.pipe(Schema.optional),\n /** View count. */\n viewCount: Schema.Number.pipe(Schema.optional),\n /** Like count. */\n likeCount: Schema.Number.pipe(Schema.optional),\n /** Full transcript text. */\n transcript: Schema.String.pipe(Schema.optional),\n /** Transcript segments with timestamps. */\n transcriptSegments: Schema.Array(TranscriptSegment).pipe(Schema.optional),\n /** True when transcript text was successfully loaded; false when disabled or none available. */\n transcriptFetched: Schema.Boolean.pipe(Schema.optional),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.youtubeVideo',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--play--regular',\n hue: 'red',\n }),\n);\n\nexport interface YouTubeVideo extends Schema.Schema.Type<typeof YouTubeVideo> {}\n\n/** Checks if a value is a YouTubeVideo object. */\nexport const instanceOf = (value: unknown): value is YouTubeVideo => Obj.instanceOf(YouTubeVideo, value);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["YouTubeOperation", "Schema", "Annotation", "Feed", "Obj", "Ref", "Type", "FormInputAnnotation", "FeedAnnotation", "AccessToken", "LegacyYouTubeChannel", "Struct", "name", "String", "pipe", "optional", "channelId", "channelUrl", "feed", "Ref", "Feed", "lastSyncedAt", "accessToken", "AccessToken", "Type", "object", "typename", "version", "YouTubeChannel", "FormInputAnnotation", "set", "annotations", "title", "description", "Annotation", "IconAnnotation", "icon", "hue", "FeedAnnotation", "instanceOf", "value", "Obj", "CreateYouTubeChannelSchema", "make", "props", "channel", "setParent", "instanceOf", "Schema", "Annotation", "Obj", "Type", "TranscriptSegment", "Struct", "text", "String", "offset", "Number", "duration", "LegacyYouTubeVideo", "title", "videoId", "description", "pipe", "optional", "url", "thumbnailUrl", "channelTitle", "publishedAt", "viewCount", "likeCount", "transcript", "transcriptSegments", "Array", "transcriptFetched", "Boolean", "Type", "object", "typename", "version", "YouTubeVideo", "Annotation", "IconAnnotation", "set", "icon", "hue", "instanceOf", "value", "Obj"]
|
|
7
|
+
}
|
package/dist/lib/node-esm/{clear-synced-videos-5UCH6XHL.mjs → clear-synced-videos-ZX7KBPGS.mjs}
RENAMED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
ClearSyncedVideos
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-6BUJ2DQX.mjs";
|
|
4
|
+
} from "./chunk-A3SKNJFU.mjs";
|
|
6
5
|
import {
|
|
7
6
|
Video_exports
|
|
8
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YOE54ALJ.mjs";
|
|
9
8
|
import "./chunk-HSLMI22Q.mjs";
|
|
10
9
|
|
|
11
10
|
// src/operations/clear-synced-videos.ts
|
|
@@ -13,13 +12,13 @@ import * as Effect from "effect/Effect";
|
|
|
13
12
|
import { Database, Feed, Filter, Obj, Ref } from "@dxos/echo";
|
|
14
13
|
import { log } from "@dxos/log";
|
|
15
14
|
import { Operation } from "@dxos/operation";
|
|
16
|
-
var __dxlog_file = "/
|
|
15
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-youtube/src/operations/clear-synced-videos.ts";
|
|
17
16
|
var handler = ClearSyncedVideos.pipe(Operation.withHandler(({ channel: channelRef }) => Effect.gen(function* () {
|
|
18
17
|
log("clearing youtube channel synced videos", {
|
|
19
18
|
channel: channelRef.dxn.toString()
|
|
20
19
|
}, {
|
|
21
20
|
F: __dxlog_file,
|
|
22
|
-
L:
|
|
21
|
+
L: 17,
|
|
23
22
|
S: this,
|
|
24
23
|
C: (f, a) => f(...a)
|
|
25
24
|
});
|
|
@@ -30,7 +29,7 @@ var handler = ClearSyncedVideos.pipe(Operation.withHandler(({ channel: channelRe
|
|
|
30
29
|
count: videos.length
|
|
31
30
|
}, {
|
|
32
31
|
F: __dxlog_file,
|
|
33
|
-
L:
|
|
32
|
+
L: 22,
|
|
34
33
|
S: this,
|
|
35
34
|
C: (f, a) => f(...a)
|
|
36
35
|
});
|
|
@@ -52,7 +51,7 @@ var handler = ClearSyncedVideos.pipe(Operation.withHandler(({ channel: channelRe
|
|
|
52
51
|
removedVideos: videos.length
|
|
53
52
|
}, {
|
|
54
53
|
F: __dxlog_file,
|
|
55
|
-
L:
|
|
54
|
+
L: 43,
|
|
56
55
|
S: this,
|
|
57
56
|
C: (f, a) => f(...a)
|
|
58
57
|
});
|
|
@@ -64,4 +63,4 @@ var clear_synced_videos_default = handler;
|
|
|
64
63
|
export {
|
|
65
64
|
clear_synced_videos_default as default
|
|
66
65
|
};
|
|
67
|
-
//# sourceMappingURL=clear-synced-videos-
|
|
66
|
+
//# sourceMappingURL=clear-synced-videos-ZX7KBPGS.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/operations/clear-synced-videos.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { Operation } from '@dxos/operation';\n\nimport { Channel, Video } from '../types';\
|
|
5
|
-
"mappings": ";;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,UAAUC,MAAMC,QAAQC,KAAKC,WAAW;AACjD,SAASC,WAAW;AACpB,SAASC,iBAAiB;;
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { Operation } from '@dxos/operation';\n\nimport { Channel, Video } from '../types';\nimport { ClearSyncedVideos } from './definitions';\n\nconst handler: Operation.WithHandler<typeof ClearSyncedVideos> = ClearSyncedVideos.pipe(\n Operation.withHandler(({ channel: channelRef }) =>\n Effect.gen(function* () {\n log('clearing youtube channel synced videos', { channel: channelRef.dxn.toString() });\n const channel = (yield* Database.load(channelRef)) as Channel.YouTubeChannel;\n const oldFeed = yield* Database.load(channel.feed as Ref.Ref<Feed.Feed>);\n\n const videos = yield* Feed.runQuery(oldFeed, Filter.type(Video.YouTubeVideo));\n log('removing synced videos', { count: videos.length });\n\n const newFeed = Feed.make();\n yield* Database.add(newFeed);\n Obj.setParent(newFeed, channel);\n\n Obj.change(channel, (mutable) => {\n mutable.feed = Ref.make(newFeed);\n delete mutable.lastSyncedAt;\n });\n\n if (videos.length > 0) {\n yield* Feed.remove(oldFeed, videos);\n }\n\n for (const video of videos) {\n yield* Database.remove(video);\n }\n\n yield* Database.remove(oldFeed);\n\n log('replaced youtube channel feed', { removedVideos: videos.length });\n return { removedVideos: videos.length };\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,UAAUC,MAAMC,QAAQC,KAAKC,WAAW;AACjD,SAASC,WAAW;AACpB,SAASC,iBAAiB;;AAK1B,IAAMC,UAA2DC,kBAAkBC,KACjFC,UAAUC,YAAY,CAAC,EAAEC,SAASC,WAAU,MACnCC,WAAI,aAAA;AACTC,MAAI,0CAA0C;IAAEH,SAASC,WAAWG,IAAIC,SAAQ;EAAG,GAAA;;;;;;AACnF,QAAML,UAAW,OAAOM,SAASC,KAAKN,UAAAA;AACtC,QAAMO,UAAU,OAAOF,SAASC,KAAKP,QAAQS,IAAI;AAEjD,QAAMC,SAAS,OAAOC,KAAKC,SAASJ,SAASK,OAAOC,KAAKC,cAAMC,YAAY,CAAA;AAC3Eb,MAAI,0BAA0B;IAAEc,OAAOP,OAAOQ;EAAO,GAAA;;;;;;AAErD,QAAMC,UAAUR,KAAKS,KAAI;AACzB,SAAOd,SAASe,IAAIF,OAAAA;AACpBG,MAAIC,UAAUJ,SAASnB,OAAAA;AAEvBsB,MAAIE,OAAOxB,SAAS,CAACyB,YAAAA;AACnBA,YAAQhB,OAAOiB,IAAIN,KAAKD,OAAAA;AACxB,WAAOM,QAAQE;EACjB,CAAA;AAEA,MAAIjB,OAAOQ,SAAS,GAAG;AACrB,WAAOP,KAAKiB,OAAOpB,SAASE,MAAAA;EAC9B;AAEA,aAAWmB,SAASnB,QAAQ;AAC1B,WAAOJ,SAASsB,OAAOC,KAAAA;EACzB;AAEA,SAAOvB,SAASsB,OAAOpB,OAAAA;AAEvBL,MAAI,iCAAiC;IAAE2B,eAAepB,OAAOQ;EAAO,GAAA;;;;;;AACpE,SAAO;IAAEY,eAAepB,OAAOQ;EAAO;AACxC,CAAA,CAAA,CAAA;AAIJ,IAAA,8BAAevB;",
|
|
6
6
|
"names": ["Effect", "Database", "Feed", "Filter", "Obj", "Ref", "log", "Operation", "handler", "ClearSyncedVideos", "pipe", "Operation", "withHandler", "channel", "channelRef", "gen", "log", "dxn", "toString", "Database", "load", "oldFeed", "feed", "videos", "Feed", "runQuery", "Filter", "type", "Video", "YouTubeVideo", "count", "length", "newFeed", "make", "add", "Obj", "setParent", "change", "mutable", "Ref", "lastSyncedAt", "remove", "video", "removedVideos"]
|
|
7
7
|
}
|
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
meta
|
|
4
|
-
} from "./chunk-CX6MV3QM.mjs";
|
|
5
|
-
import {
|
|
6
|
-
youtube_default
|
|
7
|
-
} from "./chunk-5KNC2JMP.mjs";
|
|
8
|
-
import {
|
|
9
|
-
YouTubeHandlers
|
|
10
|
-
} from "./chunk-M4S6BE47.mjs";
|
|
11
2
|
import {
|
|
12
3
|
youtube_exports
|
|
13
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q3TVMR5B.mjs";
|
|
14
5
|
import {
|
|
15
6
|
ClearSyncedVideos,
|
|
16
7
|
Sync
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import
|
|
19
|
-
Channel_exports
|
|
20
|
-
} from "./chunk-6BUJ2DQX.mjs";
|
|
21
|
-
import {
|
|
22
|
-
Video_exports
|
|
23
|
-
} from "./chunk-CZSLL3XQ.mjs";
|
|
8
|
+
} from "./chunk-A3SKNJFU.mjs";
|
|
9
|
+
import "./chunk-YOE54ALJ.mjs";
|
|
24
10
|
import "./chunk-HSLMI22Q.mjs";
|
|
25
11
|
|
|
12
|
+
// src/meta.ts
|
|
13
|
+
import { trim } from "@dxos/util";
|
|
14
|
+
var meta = {
|
|
15
|
+
id: "org.dxos.plugin.youtube",
|
|
16
|
+
name: "YouTube",
|
|
17
|
+
description: trim`
|
|
18
|
+
YouTube channel subscription and video feed management.
|
|
19
|
+
Sync videos from channels and access transcripts for analysis.
|
|
20
|
+
`,
|
|
21
|
+
icon: "ph--youtube-logo--regular",
|
|
22
|
+
iconHue: "red",
|
|
23
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-youtube",
|
|
24
|
+
tags: [
|
|
25
|
+
"labs"
|
|
26
|
+
]
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/operations/index.ts
|
|
30
|
+
import { OperationHandlerSet } from "@dxos/operation";
|
|
31
|
+
var YouTubeHandlers = OperationHandlerSet.lazy(() => import("./clear-synced-videos-ZX7KBPGS.mjs"), () => import("./sync-RQYQ5LII.mjs"));
|
|
32
|
+
|
|
26
33
|
// src/YouTubePlugin.tsx
|
|
27
34
|
import * as Effect from "effect/Effect";
|
|
28
35
|
import * as Option from "effect/Option";
|
|
@@ -30,73 +37,68 @@ import { ActivationEvent, Plugin } from "@dxos/app-framework";
|
|
|
30
37
|
import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
|
|
31
38
|
import { Annotation } from "@dxos/echo";
|
|
32
39
|
import { Operation } from "@dxos/operation";
|
|
33
|
-
import { AttentionEvents } from "@dxos/plugin-attention";
|
|
40
|
+
import { AttentionEvents } from "@dxos/plugin-attention/types";
|
|
41
|
+
import { ClientEvents } from "@dxos/plugin-client/types";
|
|
34
42
|
import { SpaceOperation } from "@dxos/plugin-space/operations";
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// src/capabilities/blueprint-definition/index.ts
|
|
41
|
-
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
42
|
-
var BlueprintDefinition = Capability2.lazy("BlueprintDefinition", () => import("./blueprint-definition-W264MZ3D.mjs"));
|
|
43
|
-
|
|
44
|
-
// src/capabilities/react-surface/index.ts
|
|
45
|
-
import { Capability as Capability3 } from "@dxos/app-framework";
|
|
46
|
-
var ReactSurface = Capability3.lazy("ReactSurface", () => import("./react-surface-5DJAQPHJ.mjs"));
|
|
43
|
+
import { YouTubeBlueprint } from "#blueprints";
|
|
44
|
+
import { AppGraphBuilder, BlueprintDefinition, Migrations, ReactSurface } from "#capabilities";
|
|
45
|
+
import { meta as meta3 } from "#meta";
|
|
46
|
+
import { Channel as Channel2, Video as Video2 } from "#types";
|
|
47
47
|
|
|
48
48
|
// src/translations.ts
|
|
49
|
+
import { meta as meta2 } from "#meta";
|
|
50
|
+
import { Channel, Video } from "#types";
|
|
49
51
|
var translations = [
|
|
50
52
|
{
|
|
51
53
|
"en-US": {
|
|
52
|
-
[
|
|
53
|
-
"typename
|
|
54
|
-
"typename
|
|
55
|
-
"typename
|
|
56
|
-
"typename
|
|
57
|
-
"object
|
|
58
|
-
"add
|
|
59
|
-
"rename
|
|
60
|
-
"delete
|
|
61
|
-
"object
|
|
54
|
+
[Channel.YouTubeChannel.typename]: {
|
|
55
|
+
"typename.label": "YouTube Channel",
|
|
56
|
+
"typename.label_zero": "YouTube Channels",
|
|
57
|
+
"typename.label_one": "YouTube Channel",
|
|
58
|
+
"typename.label_other": "YouTube Channels",
|
|
59
|
+
"object-name.placeholder": "New YouTube channel",
|
|
60
|
+
"add-object.label": "Add YouTube channel",
|
|
61
|
+
"rename-object.label": "Rename YouTube channel",
|
|
62
|
+
"delete-object.label": "Delete YouTube channel",
|
|
63
|
+
"object-deleted.label": "YouTube channel deleted"
|
|
62
64
|
},
|
|
63
|
-
[
|
|
64
|
-
"typename
|
|
65
|
-
"typename
|
|
66
|
-
"typename
|
|
67
|
-
"typename
|
|
68
|
-
"object
|
|
69
|
-
"add
|
|
70
|
-
"rename
|
|
71
|
-
"delete
|
|
72
|
-
"object
|
|
65
|
+
[Video.YouTubeVideo.typename]: {
|
|
66
|
+
"typename.label": "Video",
|
|
67
|
+
"typename.label_zero": "Videos",
|
|
68
|
+
"typename.label_one": "Video",
|
|
69
|
+
"typename.label_other": "Videos",
|
|
70
|
+
"object-name.placeholder": "New video",
|
|
71
|
+
"add-object.label": "Add video",
|
|
72
|
+
"rename-object.label": "Rename video",
|
|
73
|
+
"delete-object.label": "Delete video",
|
|
74
|
+
"object-deleted.label": "Video deleted"
|
|
73
75
|
},
|
|
74
|
-
[
|
|
75
|
-
"plugin
|
|
76
|
-
"channel
|
|
77
|
-
"video
|
|
78
|
-
"sync
|
|
79
|
-
"sync
|
|
80
|
-
"clear
|
|
81
|
-
"clear
|
|
82
|
-
"close
|
|
83
|
-
"new
|
|
84
|
-
"empty
|
|
85
|
-
"no
|
|
86
|
-
"channel
|
|
87
|
-
"channel
|
|
88
|
-
"channel
|
|
89
|
-
"enable
|
|
90
|
-
"enabling
|
|
91
|
-
"disable
|
|
92
|
-
"view
|
|
76
|
+
[meta2.id]: {
|
|
77
|
+
"plugin.name": "YouTube",
|
|
78
|
+
"channel.label": "YouTube Channel",
|
|
79
|
+
"video.label": "Video",
|
|
80
|
+
"sync-channel.label": "Sync channel",
|
|
81
|
+
"sync-channel-error.title": "Failed to sync channel",
|
|
82
|
+
"clear-synced-videos.label": "Clear synced videos",
|
|
83
|
+
"clear-synced-videos-error.title": "Failed to clear synced videos",
|
|
84
|
+
"close.label": "Close",
|
|
85
|
+
"new-channel.label": "New YouTube Channel",
|
|
86
|
+
"empty-channel.message": "No videos synced yet",
|
|
87
|
+
"no-video.message": "Select a video to view it",
|
|
88
|
+
"channel-account.label": "Account",
|
|
89
|
+
"channel-account.placeholder": "Select account...",
|
|
90
|
+
"channel-sync.label": "Channel Sync",
|
|
91
|
+
"enable-background-sync.label": "Enable background sync",
|
|
92
|
+
"enabling-background-sync.label": "Enabling...",
|
|
93
|
+
"disable-background-sync.label": "Disable background sync",
|
|
94
|
+
"view-trigger.label": "View trigger"
|
|
93
95
|
}
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
];
|
|
97
99
|
|
|
98
100
|
// src/YouTubePlugin.tsx
|
|
99
|
-
var YouTubePlugin = Plugin.define(
|
|
101
|
+
var YouTubePlugin = Plugin.define(meta3).pipe(AppPlugin.addAppGraphModule({
|
|
100
102
|
activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupAppGraph, AttentionEvents.AttentionReady),
|
|
101
103
|
activate: AppGraphBuilder
|
|
102
104
|
}), AppPlugin.addBlueprintDefinitionModule({
|
|
@@ -104,17 +106,17 @@ var YouTubePlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
|
|
|
104
106
|
}), AppPlugin.addMetadataModule({
|
|
105
107
|
metadata: [
|
|
106
108
|
{
|
|
107
|
-
id:
|
|
109
|
+
id: Channel2.YouTubeChannel.typename,
|
|
108
110
|
metadata: {
|
|
109
111
|
label: (object) => object.name ?? object.channelUrl ?? object.channelId ?? "YouTube",
|
|
110
|
-
icon: Annotation.IconAnnotation.get(
|
|
111
|
-
iconHue: Annotation.IconAnnotation.get(
|
|
112
|
+
icon: Annotation.IconAnnotation.get(Channel2.YouTubeChannel).pipe(Option.getOrThrow).icon,
|
|
113
|
+
iconHue: Annotation.IconAnnotation.get(Channel2.YouTubeChannel).pipe(Option.getOrThrow).hue ?? "white",
|
|
112
114
|
blueprints: [
|
|
113
|
-
|
|
115
|
+
YouTubeBlueprint.key
|
|
114
116
|
],
|
|
115
|
-
inputSchema:
|
|
117
|
+
inputSchema: Channel2.CreateYouTubeChannelSchema,
|
|
116
118
|
createObject: (props, options) => Effect.gen(function* () {
|
|
117
|
-
const object =
|
|
119
|
+
const object = Channel2.make(props);
|
|
118
120
|
return yield* Operation.invoke(SpaceOperation.AddObject, {
|
|
119
121
|
object,
|
|
120
122
|
target: options.target,
|
|
@@ -125,23 +127,26 @@ var YouTubePlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
|
|
|
125
127
|
}
|
|
126
128
|
},
|
|
127
129
|
{
|
|
128
|
-
id:
|
|
130
|
+
id: Video2.YouTubeVideo.typename,
|
|
129
131
|
metadata: {
|
|
130
132
|
label: (object) => object.title,
|
|
131
|
-
icon: Annotation.IconAnnotation.get(
|
|
132
|
-
iconHue: Annotation.IconAnnotation.get(
|
|
133
|
+
icon: Annotation.IconAnnotation.get(Video2.YouTubeVideo).pipe(Option.getOrThrow).icon,
|
|
134
|
+
iconHue: Annotation.IconAnnotation.get(Video2.YouTubeVideo).pipe(Option.getOrThrow).hue ?? "white"
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
]
|
|
136
138
|
}), AppPlugin.addSchemaModule({
|
|
137
139
|
schema: [
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
Channel2.YouTubeChannel,
|
|
141
|
+
Video2.YouTubeVideo
|
|
140
142
|
]
|
|
141
143
|
}), AppPlugin.addSurfaceModule({
|
|
142
144
|
activate: ReactSurface
|
|
143
145
|
}), AppPlugin.addTranslationsModule({
|
|
144
146
|
translations
|
|
147
|
+
}), Plugin.addModule({
|
|
148
|
+
activatesOn: ClientEvents.SetupMigration,
|
|
149
|
+
activate: Migrations
|
|
145
150
|
}), Plugin.make);
|
|
146
151
|
export {
|
|
147
152
|
ClearSyncedVideos,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { ActivationEvent, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Annotation } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { AttentionEvents } from '@dxos/plugin-attention';\nimport {
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Effect", "Option", "ActivationEvent", "Plugin", "AppActivationEvents", "AppPlugin", "Annotation", "Operation", "AttentionEvents", "
|
|
3
|
+
"sources": ["../../../src/meta.ts", "../../../src/operations/index.ts", "../../../src/YouTubePlugin.tsx", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.youtube',\n name: 'YouTube',\n description: trim`\n YouTube channel subscription and video feed management.\n Sync videos from channels and access transcripts for analysis.\n `,\n icon: 'ph--youtube-logo--regular',\n iconHue: 'red',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-youtube',\n tags: ['labs'],\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/operation';\n\nexport { YouTube } from './apis';\nexport * from './definitions';\n\nexport const YouTubeHandlers = OperationHandlerSet.lazy(\n () => import('./clear-synced-videos'),\n () => import('./sync'),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { ActivationEvent, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Annotation } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { AttentionEvents } from '@dxos/plugin-attention/types';\nimport { ClientEvents } from '@dxos/plugin-client/types';\nimport { SpaceOperation } from '@dxos/plugin-space/operations';\nimport { type CreateObject } from '@dxos/plugin-space/types';\n\nimport { YouTubeBlueprint } from '#blueprints';\nimport { AppGraphBuilder, BlueprintDefinition, Migrations, ReactSurface } from '#capabilities';\nimport { meta } from '#meta';\nimport { Channel, Video } from '#types';\n\nimport { translations } from './translations';\n\nexport const YouTubePlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({\n activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupAppGraph, AttentionEvents.AttentionReady),\n activate: AppGraphBuilder,\n }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addMetadataModule({\n metadata: [\n {\n id: Channel.YouTubeChannel.typename,\n metadata: {\n label: (object: Channel.YouTubeChannel) => object.name ?? object.channelUrl ?? object.channelId ?? 'YouTube',\n icon: Annotation.IconAnnotation.get(Channel.YouTubeChannel).pipe(Option.getOrThrow).icon,\n iconHue: Annotation.IconAnnotation.get(Channel.YouTubeChannel).pipe(Option.getOrThrow).hue ?? 'white',\n blueprints: [YouTubeBlueprint.key],\n inputSchema: Channel.CreateYouTubeChannelSchema,\n createObject: ((props, options) =>\n Effect.gen(function* () {\n const object = Channel.make(props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n targetNodeId: options.targetNodeId,\n });\n })) satisfies CreateObject,\n },\n },\n {\n id: Video.YouTubeVideo.typename,\n metadata: {\n label: (object: Video.YouTubeVideo) => object.title,\n icon: Annotation.IconAnnotation.get(Video.YouTubeVideo).pipe(Option.getOrThrow).icon,\n iconHue: Annotation.IconAnnotation.get(Video.YouTubeVideo).pipe(Option.getOrThrow).hue ?? 'white',\n },\n },\n ],\n }),\n AppPlugin.addSchemaModule({\n schema: [Channel.YouTubeChannel, Video.YouTubeVideo],\n }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule({\n activatesOn: ClientEvents.SetupMigration,\n activate: Migrations,\n }),\n Plugin.make,\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\nimport { Channel, Video } from '#types';\n\nexport const translations = [\n {\n 'en-US': {\n [Channel.YouTubeChannel.typename]: {\n 'typename.label': 'YouTube Channel',\n 'typename.label_zero': 'YouTube Channels',\n 'typename.label_one': 'YouTube Channel',\n 'typename.label_other': 'YouTube Channels',\n 'object-name.placeholder': 'New YouTube channel',\n 'add-object.label': 'Add YouTube channel',\n 'rename-object.label': 'Rename YouTube channel',\n 'delete-object.label': 'Delete YouTube channel',\n 'object-deleted.label': 'YouTube channel deleted',\n },\n [Video.YouTubeVideo.typename]: {\n 'typename.label': 'Video',\n 'typename.label_zero': 'Videos',\n 'typename.label_one': 'Video',\n 'typename.label_other': 'Videos',\n 'object-name.placeholder': 'New video',\n 'add-object.label': 'Add video',\n 'rename-object.label': 'Rename video',\n 'delete-object.label': 'Delete video',\n 'object-deleted.label': 'Video deleted',\n },\n [meta.id]: {\n 'plugin.name': 'YouTube',\n 'channel.label': 'YouTube Channel',\n 'video.label': 'Video',\n 'sync-channel.label': 'Sync channel',\n 'sync-channel-error.title': 'Failed to sync channel',\n 'clear-synced-videos.label': 'Clear synced videos',\n 'clear-synced-videos-error.title': 'Failed to clear synced videos',\n 'close.label': 'Close',\n 'new-channel.label': 'New YouTube Channel',\n 'empty-channel.message': 'No videos synced yet',\n 'no-video.message': 'Select a video to view it',\n\n 'channel-account.label': 'Account',\n 'channel-account.placeholder': 'Select account...',\n 'channel-sync.label': 'Channel Sync',\n\n 'enable-background-sync.label': 'Enable background sync',\n 'enabling-background-sync.label': 'Enabling...',\n 'disable-background-sync.label': 'Disable background sync',\n 'view-trigger.label': 'View trigger',\n },\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "tags", "OperationHandlerSet", "YouTubeHandlers", "OperationHandlerSet", "lazy", "Effect", "Option", "ActivationEvent", "Plugin", "AppActivationEvents", "AppPlugin", "Annotation", "Operation", "AttentionEvents", "ClientEvents", "SpaceOperation", "YouTubeBlueprint", "AppGraphBuilder", "BlueprintDefinition", "Migrations", "ReactSurface", "meta", "Channel", "Video", "meta", "Channel", "Video", "translations", "Channel", "YouTubeChannel", "typename", "Video", "YouTubeVideo", "meta", "id", "YouTubePlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addAppGraphModule", "activatesOn", "ActivationEvent", "allOf", "AppActivationEvents", "SetupAppGraph", "AttentionEvents", "AttentionReady", "activate", "AppGraphBuilder", "addBlueprintDefinitionModule", "BlueprintDefinition", "addMetadataModule", "metadata", "id", "Channel", "YouTubeChannel", "typename", "label", "object", "name", "channelUrl", "channelId", "icon", "Annotation", "IconAnnotation", "get", "getOrThrow", "iconHue", "hue", "blueprints", "YouTubeBlueprint", "key", "inputSchema", "CreateYouTubeChannelSchema", "createObject", "props", "options", "gen", "make", "Operation", "invoke", "SpaceOperation", "AddObject", "target", "hidden", "targetNodeId", "Video", "YouTubeVideo", "title", "addSchemaModule", "schema", "addSurfaceModule", "ReactSurface", "addTranslationsModule", "translations", "addModule", "ClientEvents", "SetupMigration", "Migrations"]
|
|
7
7
|
}
|