n8n-nodes-kinescope 0.1.0 → 0.3.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 (35) hide show
  1. package/README.md +70 -22
  2. package/dist/credentials/KinescopeWorkspaceApi.credentials.d.ts +2 -1
  3. package/dist/credentials/KinescopeWorkspaceApi.credentials.js +45 -5
  4. package/dist/credentials/KinescopeWorkspaceApi.credentials.js.map +1 -1
  5. package/dist/nodes/Kinescope/Kinescope.node.d.ts +1 -0
  6. package/dist/nodes/Kinescope/Kinescope.node.js +7 -1
  7. package/dist/nodes/Kinescope/Kinescope.node.js.map +1 -1
  8. package/dist/nodes/Kinescope/methods.d.ts +1 -0
  9. package/dist/nodes/Kinescope/methods.js +16 -0
  10. package/dist/nodes/Kinescope/methods.js.map +1 -1
  11. package/dist/nodes/Kinescope/props.d.ts +2 -0
  12. package/dist/nodes/Kinescope/props.js +25 -0
  13. package/dist/nodes/Kinescope/props.js.map +1 -1
  14. package/dist/nodes/Kinescope/resources/folder.d.ts +2 -0
  15. package/dist/nodes/Kinescope/resources/folder.js +58 -0
  16. package/dist/nodes/Kinescope/resources/folder.js.map +1 -0
  17. package/dist/nodes/Kinescope/resources/project.d.ts +7 -0
  18. package/dist/nodes/Kinescope/resources/project.js +108 -0
  19. package/dist/nodes/Kinescope/resources/project.js.map +1 -0
  20. package/dist/nodes/Kinescope/resources/room.js +3 -2
  21. package/dist/nodes/Kinescope/resources/room.js.map +1 -1
  22. package/dist/nodes/Kinescope/resources/signingKey.js +14 -6
  23. package/dist/nodes/Kinescope/resources/signingKey.js.map +1 -1
  24. package/dist/nodes/Kinescope/resources/subtitle.d.ts +11 -0
  25. package/dist/nodes/Kinescope/resources/subtitle.js +380 -0
  26. package/dist/nodes/Kinescope/resources/subtitle.js.map +1 -0
  27. package/dist/nodes/Kinescope/resources/video.js +133 -0
  28. package/dist/nodes/Kinescope/resources/video.js.map +1 -1
  29. package/dist/shared/jwt.d.ts +3 -1
  30. package/dist/shared/jwt.js +56 -9
  31. package/dist/shared/jwt.js.map +1 -1
  32. package/dist/shared/transport.d.ts +7 -0
  33. package/dist/shared/transport.js +15 -7
  34. package/dist/shared/transport.js.map +1 -1
  35. package/package.json +5 -3
package/README.md CHANGED
@@ -1,16 +1,17 @@
1
1
  # n8n-nodes-kinescope
2
2
 
3
3
  n8n community nodes for [Kinescope](https://kinescope.io), the video hosting platform, and Speak,
4
- its video meeting tool. An action node with 31 operations across 9 resources — Speak rooms and
4
+ its video meeting tool. An action node with 46 operations across 12 resources — Speak rooms and
5
5
  signed admin links to them, participants, calls with their recordings and transcripts, restream
6
- destinations, catalog videos with download, users, webhooks and signing keys, plus a Custom Request
7
- for every other route — and a trigger that subscribes itself to Kinescope's webhooks.
6
+ destinations, catalog videos with download, upload by URL, editing and moving, subtitles by speech
7
+ recognition, projects and folders, users, webhooks and signing keys, plus a Custom Request for every
8
+ other route — and a trigger that subscribes itself to Kinescope's webhooks.
8
9
 
9
10
  Written from scratch against the official documentation
10
11
  ([docs.kinescope.com/api](https://docs.kinescope.com/api/speak/), read on 22.10.2026). No code from
11
12
  any other package.
12
13
 
13
- **Status: 0.1.0.** Every operation ran against a live Kinescope workspace, the trigger included;
14
+ **Status: 0.3.0.** Every operation ran against a live Kinescope workspace, the trigger included;
14
15
  the two transcript operations ran but never met a transcript. See [What was checked](#what-was-checked). Where Kinescope behaves differently from its
15
16
  documentation, this README says so.
16
17
 
@@ -47,7 +48,7 @@ node: its *Allowed HTTP Request Domains* setting is pinned to none, so the token
47
48
  another server by pointing a generic node at it. Use **Custom Request** for a route the other
48
49
  operations lack.
49
50
 
50
- **Signing Private Key** and **Signing Key ID** are optional and serve Room → Get Admin Link only; see
51
+ **Admin Link Signing Key** serves Room → Get Admin Link only and needs nothing by default; see
51
52
  [Admin links](#admin-links).
52
53
 
53
54
  ## Kinescope node
@@ -58,7 +59,10 @@ operations lack.
58
59
  | Participant | Add, Get, Get Many, Update, Remove |
59
60
  | Call | Get, Get Many, Get Recordings, Get Transcript, Download Transcript |
60
61
  | Restream Destination | Get Many, Update |
61
- | Video | Get, Get Many, Download, Delete |
62
+ | Video | Get, Get Many, Download, Update, Move, Upload From URL, Delete |
63
+ | Subtitle | Generate, Get, Get Many, Download, Upload, Update, Delete |
64
+ | Project | Create, Get, Get Many |
65
+ | Folder | Create, Get Many |
62
66
  | User | Get Many |
63
67
  | Webhook | Create, Get Many, Update, Delete |
64
68
  | Signing Key | Register, Get Many, Delete |
@@ -81,17 +85,27 @@ It is the token of Kinescope's
81
85
  [Speak login link](https://docs.kinescope.com/developer-guides/speak-admin-login-link/) — RS256,
82
86
  `aud: speak`, the room code, `role: admin` — signed in n8n with a private key Kinescope never sees.
83
87
 
84
- 1. Make an RSA key: `openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out speak.pem`.
85
- 2. Paste the file's content into **Signing Private Key** of the credential and give it a **Signing
86
- Key ID**, any name unique in the workspace. A PEM pasted into the one-line field loses its line
87
- breaks; the node puts them back.
88
- 3. Run **Signing Key → Register** once, with an expiry date (Kinescope requires one). It sends
89
- Kinescope the public half only.
90
- 4. **Room → Get Admin Link** with Valid For in minutes; keep it close to the meeting's length.
88
+ **There is nothing to set up.** With Admin Link Signing Key on *Generated by n8n*, the default, n8n
89
+ makes an RSA key on the first request with the credential and keeps it in the credential, encrypted
90
+ and blanked out in the editor. The first admin link registers its public half with Kinescope, valid
91
+ for 100 years, under an ID taken from the key itself (`n8n-` and 16 hex digits). On n8n 2.38.5 the
92
+ key stayed the same from one execution to the next and after the credential was saved again from the
93
+ editor.
91
94
 
92
- Anyone holding such a link is admin of that room until it expires — send it to the host, not to a
93
- channel. Signing Key → Delete stops every link signed with the key at once. Kinescope uses the same
94
- keys for stream chat tokens, telling them apart by `aud`.
95
+ - A copy of a credential — duplicated, or imported on another n8n — carries the same key. Two
96
+ credentials have two keys, both registered; neither touches the other's.
97
+ - A credential that loses its key, e.g. one created anew, gets a new one with its next request. Links
98
+ signed before keep working: the old public key stays in Kinescope until you delete it.
99
+ - **After a leak, replace the credential first**, then remove the old key with Signing Key → Delete.
100
+ A credential still holding the key registers it again with its next admin link.
101
+
102
+ With *My Own Key* the node signs with a key you paste — from
103
+ `openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048` — under an ID you choose. The first
104
+ link registers it for 100 years; Signing Key → Register sets another expiry if you run it first. A
105
+ PEM pasted into the one-line field loses its line breaks; the node puts them back.
106
+
107
+ Anyone holding an admin link is admin of that room until Valid For runs out — send it to the host,
108
+ not to a channel. Kinescope uses the same keys for stream chat tokens, telling them apart by `aud`.
95
109
 
96
110
  **Participant** is a workspace user given a role in a room ahead of a meeting: Admin or Manager, both
97
111
  need a user ID, and a user can be added once. The owner is in the room already. Update changes the
@@ -123,6 +137,26 @@ For a Speak recording Kinescope lists `file_size` of the video stream alone, whi
123
137
  audio too and downloads larger. The node passes the figure on as `listedFileSize`
124
138
  rather than pretending it is the file's size.
125
139
 
140
+ **Video → Update** changes the title, description and embedding privacy; **Move** puts a video into
141
+ another project or folder, its ID and links unchanged. **Upload From URL** has Kinescope fetch a file
142
+ from a direct link or a YouTube address and returns at once with status `uploading`. Upload headers
143
+ carry Latin-1 only, so the node percent-encodes the title, description and file name, and Kinescope
144
+ decodes them: a title with Cyrillic, guillemets, `&` and `%` arrived intact. Uploading a file from
145
+ n8n itself is not here yet.
146
+
147
+ **Subtitle → Generate** has Kinescope recognise the speech of a video, one track per language code.
148
+ Kinescope answers at once with the tracks `pending`; with Wait for Recognition on, the node polls
149
+ every ten seconds until they are `done`. A 16-second clip of Russian speech was done within the
150
+ first poll and came back word for word, without punctuation and without speaker names. **Download**
151
+ gives the cues as items with start and end in seconds, the text, or a VTT or SRT file. **Upload**
152
+ attaches a VTT or SRT file from binary data. Kinescope rejects an audio-only file as a video, so the
153
+ check used a video with sound. What recognition costs is not in Kinescope's API reference; see your
154
+ plan.
155
+
156
+ **Project** and **Folder** list and create the places videos live in; Move and Upload From URL pick
157
+ them from dropdowns. Kinescope returns a project's privacy domains as record IDs, not as the domain
158
+ names sent.
159
+
126
160
  **Webhook.** Kinescope returns the Basic Auth password of a webhook in plain text, though its
127
161
  reference shows it redacted; Get Many leaves it out unless Include Password is on. Kinescope's update
128
162
  replaces the whole webhook and refuses an empty endpoint or event list, so Update reads the current
@@ -180,6 +214,13 @@ into n8n's binary storage either way.
180
214
 
181
215
  From the other side — a call ID in hand — **Call → Get Recordings** finds its videos.
182
216
 
217
+ To keep the recording tidy, **Video → Update** gives it a title after the meeting and **Video → Move**
218
+ takes it out of `Speak Records` into the project or folder it belongs in.
219
+
220
+ For the text of the meeting, **Subtitle → Generate** with Wait for Recognition on and then
221
+ **Subtitle → Download** as Text. It is speech recognition of the recording — one stream of text with
222
+ no speaker names — and works where Speak's own transcript does not appear, see below.
223
+
183
224
  A recording a few seconds long and without sound ended in status `error` with no files; a longer one
184
225
  with sound went through.
185
226
 
@@ -205,14 +246,16 @@ What Kinescope's API gives today:
205
246
 
206
247
  ## Not here, or not known
207
248
 
208
- - **Transcripts were not seen.** Automatic Transcription was on in the test room, yet no call got a
209
- transcript: `transcript_id` stayed empty. Like automatic recording it may wait for the owner. Get
210
- Transcript and Download Transcript are written to the reference and its example
211
- (`[MM:SS.T-MM:SS.T] Speaker: Text`) and are untested against a real transcript.
249
+ - **Speak transcripts were not seen.** Automatic Transcription was on in the test room, yet no call
250
+ got a transcript: `transcript_id` stayed empty. Like automatic recording it may wait for the owner.
251
+ Get Transcript and Download Transcript are written to the reference and its example
252
+ (`[MM:SS.T-MM:SS.T] Speaker: Text`) and are untested against a real transcript. Subtitle → Generate
253
+ on the recording gives the text without speakers.
212
254
  - Restream destinations cannot be started, stopped, added to an existing room or removed one by one
213
255
  through the API; the room interface does that.
214
- - Live events, playlists, players, analytics and uploads are reachable through Custom Request only.
215
- The uploader host `uploader.kinescope.io` is not: Custom Request is fixed to `api.kinescope.io`.
256
+ - Live events, playlists, players and analytics are reachable through Custom Request only. Uploading
257
+ a file from n8n is not: the uploader host takes only Upload From URL here, and Custom Request is
258
+ fixed to `api.kinescope.io`.
216
259
 
217
260
  ## What was checked
218
261
 
@@ -229,6 +272,11 @@ runtime:
229
272
  video and an audio track; Video → Delete on the test recordings;
230
273
  - the trigger's registration, re-registration and removal against the API, and a real Kinescope
231
274
  delivery with its Basic Auth header;
275
+ - Subtitle, Project, Folder and Video → Update, Move and Upload From URL in a test project, its
276
+ videos and folders deleted afterwards: recognition of a Russian speech clip, every download format,
277
+ an SRT uploaded and read back;
278
+ - the generated signing key in n8n 2.38.5 itself: made on the first request, the same key in later
279
+ executions and after the credential was saved again from the editor, blanked out in the editor;
232
280
  - the error texts for a malformed ID, a missing call, a refused event, a sort field Kinescope does not
233
281
  take, and a file a video does not have.
234
282
 
@@ -1,4 +1,4 @@
1
- import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
1
+ import type { IAuthenticateGeneric, ICredentialDataDecryptedObject, Icon, ICredentialTestRequest, ICredentialType, IDataObject, IHttpRequestHelper, INodeProperties } from 'n8n-workflow';
2
2
  export declare const API_ORIGIN = "https://api.kinescope.io";
3
3
  export declare function normalizeApiToken(raw: unknown): string;
4
4
  export declare class KinescopeWorkspaceApi implements ICredentialType {
@@ -7,6 +7,7 @@ export declare class KinescopeWorkspaceApi implements ICredentialType {
7
7
  documentationUrl: string;
8
8
  icon: Icon;
9
9
  properties: INodeProperties[];
10
+ preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject): Promise<IDataObject>;
10
11
  authenticate: IAuthenticateGeneric;
11
12
  test: ICredentialTestRequest;
12
13
  }
@@ -2,6 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.KinescopeWorkspaceApi = exports.API_ORIGIN = void 0;
4
4
  exports.normalizeApiToken = normalizeApiToken;
5
+ const node_crypto_1 = require("node:crypto");
6
+ async function generateSigningKey() {
7
+ return await new Promise((resolve, reject) => {
8
+ (0, node_crypto_1.generateKeyPair)('rsa', {
9
+ modulusLength: 2048,
10
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
11
+ privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
12
+ }, (error, _publicKey, privateKey) => (error ? reject(error) : resolve(privateKey)));
13
+ });
14
+ }
5
15
  exports.API_ORIGIN = 'https://api.kinescope.io';
6
16
  const TOKEN_EXPRESSION = 'String($credentials.apiToken || "").trim().replace(/^Bearer\\s+/i, "")';
7
17
  function normalizeApiToken(raw) {
@@ -27,10 +37,23 @@ class KinescopeWorkspaceApi {
27
37
  description: 'A token from Settings → API tokens in Kinescope. It acts for the whole workspace it was issued in; give each integration its own token so one can be revoked without breaking the others.',
28
38
  },
29
39
  {
30
- displayName: 'The two fields below are needed only for Room → Get Admin Link, which signs Speak links that let a person in as room admin. Leave them empty otherwise.',
31
- name: 'signingNotice',
32
- type: 'notice',
33
- default: '',
40
+ displayName: 'Admin Link Signing Key',
41
+ name: 'signingKeySource',
42
+ type: 'options',
43
+ default: 'generated',
44
+ options: [
45
+ {
46
+ name: 'Generated by n8n',
47
+ value: 'generated',
48
+ description: 'n8n makes a key on first use and keeps it, encrypted, in this credential. Nothing to fill in.',
49
+ },
50
+ {
51
+ name: 'My Own Key',
52
+ value: 'own',
53
+ description: 'Paste an RSA private key and give it an ID',
54
+ },
55
+ ],
56
+ description: 'The key Room → Get Admin Link signs Speak links with. Kinescope receives its public half the first time a link is made.',
34
57
  },
35
58
  {
36
59
  displayName: 'Signing Private Key',
@@ -39,7 +62,8 @@ class KinescopeWorkspaceApi {
39
62
  typeOptions: { password: true },
40
63
  default: '',
41
64
  placeholder: '-----BEGIN PRIVATE KEY----- …',
42
- description: 'An RSA private key in PEM form, e.g. from: openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048. It never leaves n8n; Signing Key → Register gives Kinescope its public half.',
65
+ displayOptions: { show: { signingKeySource: ['own'] } },
66
+ description: 'An RSA private key in PEM form, e.g. from: openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048. It never leaves n8n; Kinescope gets its public half.',
43
67
  },
44
68
  {
45
69
  displayName: 'Signing Key ID',
@@ -47,8 +71,16 @@ class KinescopeWorkspaceApi {
47
71
  type: 'string',
48
72
  default: '',
49
73
  placeholder: 'n8n-2026-10',
74
+ displayOptions: { show: { signingKeySource: ['own'] } },
50
75
  description: 'A name for the key, unique in the workspace (Kinescope calls it kid). It goes into every signed link so Kinescope knows which public key to check it with.',
51
76
  },
77
+ {
78
+ displayName: 'Generated Private Key',
79
+ name: 'generatedPrivateKey',
80
+ type: 'hidden',
81
+ typeOptions: { expirable: true, password: true },
82
+ default: '',
83
+ },
52
84
  {
53
85
  displayName: 'Allowed HTTP Request Domains',
54
86
  name: 'allowedHttpRequestDomains',
@@ -89,6 +121,14 @@ class KinescopeWorkspaceApi {
89
121
  ],
90
122
  };
91
123
  }
124
+ async preAuthentication(credentials) {
125
+ var _a;
126
+ if (String((_a = credentials.generatedPrivateKey) !== null && _a !== void 0 ? _a : '') !== '')
127
+ return {};
128
+ if (credentials.signingKeySource === 'own')
129
+ return {};
130
+ return { generatedPrivateKey: await generateSigningKey() };
131
+ }
92
132
  }
93
133
  exports.KinescopeWorkspaceApi = KinescopeWorkspaceApi;
94
134
  //# sourceMappingURL=KinescopeWorkspaceApi.credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KinescopeWorkspaceApi.credentials.js","sourceRoot":"","sources":["../../credentials/KinescopeWorkspaceApi.credentials.ts"],"names":[],"mappings":";;;AAwBA,8CAIC;AAbY,QAAA,UAAU,GAAG,0BAA0B,CAAC;AAMrD,MAAM,gBAAgB,GAAG,wEAAwE,CAAC;AAGlG,SAAgB,iBAAiB,CAAC,GAAY;IAC7C,OAAO,MAAM,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAAC;SACtB,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAa,qBAAqB;IAAlC;QACC,SAAI,GAAG,uBAAuB,CAAC;QAE/B,gBAAW,GAAG,eAAe,CAAC;QAE9B,qBAAgB,GAAG,gEAAgE,CAAC;QAEpF,SAAI,GAAS,EAAE,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC;QAEhG,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EACV,2LAA2L;aAC5L;YACD;gBACC,WAAW,EACV,yJAAyJ;gBAC1J,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,+BAA+B;gBAC5C,WAAW,EACV,uLAAuL;aACxL;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,aAAa;gBAC1B,WAAW,EACV,4JAA4J;aAC7J;YACD;gBAOC,WAAW,EAAE,8BAA8B;gBAC3C,IAAI,EAAE,2BAA2B;gBACjC,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,cAAc,gBAAgB,KAAK;iBAClD;aACD;SACD,CAAC;QAGF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kBAAU;gBACnB,GAAG,EAAE,iBAAiB;gBACtB,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;aAC5B;YACD,KAAK,EAAE;gBACN;oBACC,IAAI,EAAE,cAAc;oBACpB,UAAU,EAAE;wBACX,KAAK,EAAE,GAAG;wBACV,OAAO,EACN,iJAAiJ;qBAClJ;iBACD;gBACD;oBACC,IAAI,EAAE,cAAc;oBACpB,UAAU,EAAE;wBACX,KAAK,EAAE,GAAG;wBACV,OAAO,EACN,kGAAkG;qBACnG;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAjGD,sDAiGC"}
1
+ {"version":3,"file":"KinescopeWorkspaceApi.credentials.js","sourceRoot":"","sources":["../../credentials/KinescopeWorkspaceApi.credentials.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class Kinescope implements INodeType {
5
5
  loadOptions: {
6
6
  getRooms(this: import("n8n-workflow").ILoadOptionsFunctions): Promise<import("n8n-workflow").INodePropertyOptions[]>;
7
7
  getUsers(this: import("n8n-workflow").ILoadOptionsFunctions): Promise<import("n8n-workflow").INodePropertyOptions[]>;
8
+ getFolders(this: import("n8n-workflow").ILoadOptionsFunctions): Promise<import("n8n-workflow").INodePropertyOptions[]>;
8
9
  getProjects(this: import("n8n-workflow").ILoadOptionsFunctions): Promise<import("n8n-workflow").INodePropertyOptions[]>;
9
10
  };
10
11
  };
@@ -7,10 +7,13 @@ const transport_1 = require("../../shared/transport");
7
7
  const methods_1 = require("./methods");
8
8
  const call_1 = require("./resources/call");
9
9
  const customRequest_1 = require("./resources/customRequest");
10
+ const folder_1 = require("./resources/folder");
10
11
  const participant_1 = require("./resources/participant");
12
+ const project_1 = require("./resources/project");
11
13
  const restream_1 = require("./resources/restream");
12
14
  const room_1 = require("./resources/room");
13
15
  const signingKey_1 = require("./resources/signingKey");
16
+ const subtitle_1 = require("./resources/subtitle");
14
17
  const user_1 = require("./resources/user");
15
18
  const video_1 = require("./resources/video");
16
19
  const webhook_1 = require("./resources/webhook");
@@ -20,6 +23,9 @@ const resources = [
20
23
  call_1.callResource,
21
24
  restream_1.restreamResource,
22
25
  video_1.videoResource,
26
+ subtitle_1.subtitleResource,
27
+ project_1.projectResource,
28
+ folder_1.folderResource,
23
29
  user_1.userResource,
24
30
  webhook_1.webhookResource,
25
31
  signingKey_1.signingKeyResource,
@@ -38,7 +44,7 @@ class Kinescope {
38
44
  defaults: { name: 'Kinescope' },
39
45
  usableAsTool: true,
40
46
  builderHint: {
41
- searchHint: 'Kinescope is a video hosting platform; Speak is its video meeting tool. Room → Create needs an owner ID from User → Get Many and returns the link people join by; recording and transcription can start automatically. Each meeting held in a room is a Call: Call → Download Transcript gives phrases with speaker and time, or talk time per speaker, once Get Transcript reports status done. Meeting recordings land in the catalog as videos: Video → Download gets the original file or a signed link for Google Drive, Yandex Disk or S3; duration is in seconds. Automatic recording starts only when the owner joins; Room → Get Admin Link signs a link that lets a host in as admin, after the signing key of the credential is registered once with Signing Key → Register. Who joined a meeting is not in the API, only in Speak webhooks. Custom Request reaches every other route. Tokens are per workspace.',
47
+ searchHint: 'Kinescope is a video hosting platform; Speak is its video meeting tool. Room → Create needs an owner ID from User → Get Many and returns the link people join by; recording and transcription can start automatically. Each meeting held in a room is a Call: Call → Download Transcript gives phrases with speaker and time, or talk time per speaker, once Get Transcript reports status done. Meeting recordings land in the catalog as videos: Video → Download gets the original file or a signed link for Google Drive, Yandex Disk or S3; duration is in seconds. Automatic recording starts only when the owner joins; Room → Get Admin Link signs a link that lets a host in as admin, after the signing key of the credential is registered once with Signing Key → Register. Subtitle → Generate (Wait for Recognition on) then Subtitle → Download as Text gives the text of a recording without speaker names. Video → Update renames a recording, Video → Move files it into a project or folder from Project → Get Many and Folder → Get Many. Who joined a meeting is not in the API, only in Speak webhooks. Custom Request reaches every other route. Tokens are per workspace.',
42
48
  relatedNodes: [
43
49
  {
44
50
  nodeType: 'n8n-nodes-kinescope.kinescopeTrigger',
@@ -1 +1 @@
1
- {"version":3,"file":"Kinescope.node.js","sourceRoot":"","sources":["../../../nodes/Kinescope/Kinescope.node.ts"],"names":[],"mappings":";;;AAMA,+CAAmD;AAGnD,4CAAsE;AACtE,sDAAoD;AACpD,uCAAwC;AACxC,2CAAgD;AAChD,6DAAkE;AAClE,yDAA8D;AAC9D,mDAAwD;AACxD,2CAAgD;AAChD,uDAA4D;AAC5D,2CAAgD;AAChD,6CAAkD;AAClD,iDAAsD;AAEtD,MAAM,SAAS,GAAe;IAC7B,mBAAY;IACZ,iCAAmB;IACnB,mBAAY;IACZ,2BAAgB;IAChB,qBAAa;IACb,mBAAY;IACZ,yBAAe;IACf,+BAAkB;IAClB,qCAAqB;CACrB,CAAC;AAEF,MAAa,SAAS;IAAtB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,WAAW;YAEjB,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC9F,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,gEAAgE;YAC1E,WAAW,EACV,yHAAyH;YAC1H,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAC/B,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACZ,UAAU,EACT,63BAA63B;gBAC93B,YAAY,EAAE;oBACb;wBACC,QAAQ,EAAE,sCAAsC;wBAChD,YAAY,EACX,uHAAuH;qBACxH;iBACD;aACD;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnD,UAAU,EAAE,IAAA,sBAAe,EAAC,SAAS,EAAE,MAAM,CAAC;SAC9C,CAAC;QAEF,YAAO,GAAG,EAAE,WAAW,EAAX,qBAAW,EAAE,CAAC;IAK3B,CAAC;IAHA,KAAK,CAAC,OAAO;QACZ,OAAO,MAAM,uBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;CACD;AAnCD,8BAmCC"}
1
+ {"version":3,"file":"Kinescope.node.js","sourceRoot":"","sources":["../../../nodes/Kinescope/Kinescope.node.ts"],"names":[],"mappings":";;;AAMA,+CAAmD;AAGnD,4CAAsE;AACtE,sDAAoD;AACpD,uCAAwC;AACxC,2CAAgD;AAChD,6DAAkE;AAClE,+CAAoD;AACpD,yDAA8D;AAC9D,iDAAsD;AACtD,mDAAwD;AACxD,2CAAgD;AAChD,uDAA4D;AAC5D,mDAAwD;AACxD,2CAAgD;AAChD,6CAAkD;AAClD,iDAAsD;AAEtD,MAAM,SAAS,GAAe;IAC7B,mBAAY;IACZ,iCAAmB;IACnB,mBAAY;IACZ,2BAAgB;IAChB,qBAAa;IACb,2BAAgB;IAChB,yBAAe;IACf,uBAAc;IACd,mBAAY;IACZ,yBAAe;IACf,+BAAkB;IAClB,qCAAqB;CACrB,CAAC;AAEF,MAAa,SAAS;IAAtB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,WAAW;YAEjB,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC9F,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,gEAAgE;YAC1E,WAAW,EACV,yHAAyH;YAC1H,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAC/B,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACZ,UAAU,EACT,moCAAmoC;gBACpoC,YAAY,EAAE;oBACb;wBACC,QAAQ,EAAE,sCAAsC;wBAChD,YAAY,EACX,uHAAuH;qBACxH;iBACD;aACD;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnD,UAAU,EAAE,IAAA,sBAAe,EAAC,SAAS,EAAE,MAAM,CAAC;SAC9C,CAAC;QAEF,YAAO,GAAG,EAAE,WAAW,EAAX,qBAAW,EAAE,CAAC;IAK3B,CAAC;IAHA,KAAK,CAAC,OAAO;QACZ,OAAO,MAAM,uBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;CACD;AAnCD,8BAmCC"}
@@ -2,5 +2,6 @@ import type { ILoadOptionsFunctions, INodePropertyOptions } from 'n8n-workflow';
2
2
  export declare const loadOptions: {
3
3
  getRooms(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
4
4
  getUsers(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
5
+ getFolders(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
5
6
  getProjects(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
6
7
  };
@@ -35,6 +35,22 @@ exports.loadOptions = {
35
35
  })
36
36
  .sort(byName);
37
37
  },
38
+ async getFolders() {
39
+ var _a;
40
+ const project = String((_a = this.getCurrentNodeParameter('projectId')) !== null && _a !== void 0 ? _a : '').trim();
41
+ if (project === '' || project.startsWith('='))
42
+ return [];
43
+ return (await list.call(this, `/v1/projects/${encodeURIComponent(project)}/folders`))
44
+ .map((folder) => {
45
+ var _a, _b;
46
+ return ({
47
+ name: String((_a = folder.name) !== null && _a !== void 0 ? _a : '').trim() || String(folder.id),
48
+ value: String(folder.id),
49
+ description: `${String((_b = folder.items_count) !== null && _b !== void 0 ? _b : 0)} items`,
50
+ });
51
+ })
52
+ .sort(byName);
53
+ },
38
54
  async getProjects() {
39
55
  return (await list.call(this, '/v1/projects'))
40
56
  .map((project) => {
@@ -1 +1 @@
1
- {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../nodes/Kinescope/methods.ts"],"names":[],"mappings":";;;AAEA,8CAA2D;AAC3D,sDAAiE;AAEjE,SAAS,MAAM,CAAC,CAAuB,EAAE,CAAuB;IAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAGD,KAAK,UAAU,IAAI,CAA8B,IAAY;IAC5D,MAAM,GAAG,GAAG,MAAM,wBAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,MAAM,IAAA,cAAM,EAClB,GAAG,GAAG,IAAI,IAAI,EAAE,EAChB,KAAK,IAAI,EAAE,CAAC,MAAM,qBAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,EAC3D,qBAAa,CACb,CAAC;AACH,CAAC;AAEY,QAAA,WAAW,GAAG;IAC1B,KAAK,CAAC,QAAQ;QACb,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;aAC/C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACf,IAAI,EAAE,MAAM,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC,IAAI,MAAM,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,EAAE,CAAC;gBAC7D,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,WAAW,EAAE,GAAG,MAAM,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC,MAAM,MAAM,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;aACzF,CAAC,CAAA;SAAA,CAAC;aACF,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACf,IAAI,EAAE,MAAM,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,EAAE,CAAC;gBAC1E,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,WAAW,EAAE,MAAM,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;aACrC,CAAC,CAAA;SAAA,CAAC;aACF,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;;YAAC,OAAA,CAAC;gBAClB,IAAI,EAAE,MAAM,CAAC,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,EAAE,CAAC;gBACxC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,WAAW,EAAE,GAAG,MAAM,CAAC,MAAA,OAAO,CAAC,WAAW,mCAAI,CAAC,CAAC,QAAQ;aACxD,CAAC,CAAA;SAAA,CAAC;aACF,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../nodes/Kinescope/methods.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,5 @@ export declare function userProperty(displayName: string, name: string, descript
4
4
  export declare function idProperty(displayName: string, name: string, description: string, placeholder?: string): INodeProperties;
5
5
  export declare function idSegment(ctx: IExecuteFunctions, name: string, itemIndex: number, label: string): string;
6
6
  export declare const SPEAK_ORIGIN = "https://speak.kinescope.io";
7
+ export declare function projectProperty(overrides?: Partial<INodeProperties>): INodeProperties;
8
+ export declare function folderProperty(overrides?: Partial<INodeProperties>): INodeProperties;
@@ -5,6 +5,8 @@ exports.roomProperty = roomProperty;
5
5
  exports.userProperty = userProperty;
6
6
  exports.idProperty = idProperty;
7
7
  exports.idSegment = idSegment;
8
+ exports.projectProperty = projectProperty;
9
+ exports.folderProperty = folderProperty;
8
10
  const params_1 = require("../../shared/params");
9
11
  const transport_1 = require("../../shared/transport");
10
12
  function roomProperty(overrides = {}) {
@@ -45,4 +47,27 @@ function idSegment(ctx, name, itemIndex, label) {
45
47
  return (0, transport_1.segment)((0, params_1.requiredText)(ctx, name, itemIndex, label));
46
48
  }
47
49
  exports.SPEAK_ORIGIN = 'https://speak.kinescope.io';
50
+ function projectProperty(overrides = {}) {
51
+ return {
52
+ displayName: 'Project Name or ID',
53
+ name: 'projectId',
54
+ type: 'options',
55
+ typeOptions: { loadOptionsMethod: 'getProjects' },
56
+ required: true,
57
+ default: '',
58
+ description: 'The project of the catalog. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
59
+ ...overrides,
60
+ };
61
+ }
62
+ function folderProperty(overrides = {}) {
63
+ return {
64
+ displayName: 'Folder Name or ID',
65
+ name: 'folderId',
66
+ type: 'options',
67
+ typeOptions: { loadOptionsMethod: 'getFolders', loadOptionsDependsOn: ['projectId'] },
68
+ default: '',
69
+ description: 'A folder inside that project; empty for the project root. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
70
+ ...overrides,
71
+ };
72
+ }
48
73
  //# sourceMappingURL=props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../nodes/Kinescope/props.ts"],"names":[],"mappings":";;;AAMA,oCAYC;AAMD,oCAcC;AAGD,gCAeC;AAGD,8BAOC;AAhED,gDAAmD;AACnD,sDAAiD;AAGjD,SAAgB,YAAY,CAAC,YAAsC,EAAE;IACpE,OAAO;QACN,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EACV,iIAAiI;QAClI,GAAG,SAAS;KACZ,CAAC;AACH,CAAC;AAMD,SAAgB,YAAY,CAC3B,WAAmB,EACnB,IAAY,EACZ,WAAmB;IAEnB,OAAO;QACN,WAAW;QACX,IAAI;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,GAAG,WAAW,mHAAmH;KAC9I,CAAC;AACH,CAAC;AAGD,SAAgB,UAAU,CACzB,WAAmB,EACnB,IAAY,EACZ,WAAmB,EACnB,WAAW,GAAG,sCAAsC;IAEpD,OAAO;QACN,WAAW;QACX,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC;AAGD,SAAgB,SAAS,CACxB,GAAsB,EACtB,IAAY,EACZ,SAAiB,EACjB,KAAa;IAEb,OAAO,IAAA,mBAAO,EAAC,IAAA,qBAAY,EAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAGY,QAAA,YAAY,GAAG,4BAA4B,CAAC"}
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../nodes/Kinescope/props.ts"],"names":[],"mappings":";;;AAMA,oCAYC;AAMD,oCAcC;AAGD,gCAeC;AAGD,8BAOC;AAMD,0CAYC;AAGD,wCAWC;AAhGD,gDAAmD;AACnD,sDAAiD;AAGjD,SAAgB,YAAY,CAAC,YAAsC,EAAE;IACpE,OAAO;QACN,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EACV,iIAAiI;QAClI,GAAG,SAAS;KACZ,CAAC;AACH,CAAC;AAMD,SAAgB,YAAY,CAC3B,WAAmB,EACnB,IAAY,EACZ,WAAmB;IAEnB,OAAO;QACN,WAAW;QACX,IAAI;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,GAAG,WAAW,mHAAmH;KAC9I,CAAC;AACH,CAAC;AAGD,SAAgB,UAAU,CACzB,WAAmB,EACnB,IAAY,EACZ,WAAmB,EACnB,WAAW,GAAG,sCAAsC;IAEpD,OAAO;QACN,WAAW;QACX,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC;AAGD,SAAgB,SAAS,CACxB,GAAsB,EACtB,IAAY,EACZ,SAAiB,EACjB,KAAa;IAEb,OAAO,IAAA,mBAAO,EAAC,IAAA,qBAAY,EAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAGY,QAAA,YAAY,GAAG,4BAA4B,CAAC;AAGzD,SAAgB,eAAe,CAAC,YAAsC,EAAE;IACvE,OAAO;QACN,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE;QACjD,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EACV,6IAA6I;QAC9I,GAAG,SAAS;KACZ,CAAC;AACH,CAAC;AAGD,SAAgB,cAAc,CAAC,YAAsC,EAAE;IACtE,OAAO;QACN,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,WAAW,CAAC,EAAE;QACrF,OAAO,EAAE,EAAE;QACX,WAAW,EACV,2KAA2K;QAC5K,GAAG,SAAS;KACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Resource } from '../../../shared/spec';
2
+ export declare const folderResource: Resource;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.folderResource = void 0;
4
+ const params_1 = require("../../../shared/params");
5
+ const transport_1 = require("../../../shared/transport");
6
+ const props_1 = require("../props");
7
+ exports.folderResource = {
8
+ value: 'folder',
9
+ name: 'Folder',
10
+ description: 'Folders inside a project of the catalog',
11
+ operations: [
12
+ {
13
+ value: 'create',
14
+ name: 'Create',
15
+ action: 'Create a folder',
16
+ description: 'Create a folder in a project, at its root or inside another folder',
17
+ properties: [
18
+ (0, props_1.projectProperty)(),
19
+ {
20
+ displayName: 'Name',
21
+ name: 'name',
22
+ type: 'string',
23
+ required: true,
24
+ default: '',
25
+ },
26
+ (0, props_1.folderProperty)({
27
+ displayName: 'Parent Folder Name or ID',
28
+ name: 'parentId',
29
+ description: 'The folder to create it in; empty for the project root. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
30
+ }),
31
+ ],
32
+ async execute(itemIndex) {
33
+ const project = (0, props_1.idSegment)(this, 'projectId', itemIndex, 'Project');
34
+ const body = (0, params_1.compact)({
35
+ name: (0, params_1.requiredText)(this, 'name', itemIndex, 'Name'),
36
+ parent_id: (0, params_1.text)(this, 'parentId', itemIndex),
37
+ });
38
+ return (0, transport_1.dataOf)(await transport_1.kinescopeRequest.call(this, 'POST', `/v1/projects/${project}/folders`, {
39
+ body,
40
+ itemIndex,
41
+ retry: false,
42
+ }));
43
+ },
44
+ },
45
+ {
46
+ value: 'getAll',
47
+ name: 'Get Many',
48
+ action: 'Get many folders',
49
+ description: 'List the folders of a project with their size and number of items',
50
+ properties: [(0, props_1.projectProperty)(), ...(0, params_1.returnAllProperties)('folders')],
51
+ async execute(itemIndex) {
52
+ const project = (0, props_1.idSegment)(this, 'projectId', itemIndex, 'Project');
53
+ return await transport_1.readPages.call(this, `/v1/projects/${project}/folders`, {}, (0, params_1.wantedRows)(this, itemIndex), itemIndex);
54
+ },
55
+ },
56
+ ],
57
+ };
58
+ //# sourceMappingURL=folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder.js","sourceRoot":"","sources":["../../../../nodes/Kinescope/resources/folder.ts"],"names":[],"mappings":";;;AAAA,mDAMgC;AAEhC,yDAAgF;AAChF,oCAAsE;AAEzD,QAAA,cAAc,GAAa;IACvC,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,yCAAyC;IACtD,UAAU,EAAE;QACX;YACC,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,iBAAiB;YACzB,WAAW,EAAE,oEAAoE;YACjF,UAAU,EAAE;gBACX,IAAA,uBAAe,GAAE;gBACjB;oBACC,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,EAAE;iBACX;gBACD,IAAA,sBAAc,EAAC;oBACd,WAAW,EAAE,0BAA0B;oBACvC,IAAI,EAAE,UAAU;oBAChB,WAAW,EACV,yKAAyK;iBAC1K,CAAC;aACF;YACD,KAAK,CAAC,OAAO,CAAC,SAAS;gBACtB,MAAM,OAAO,GAAG,IAAA,iBAAS,EAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBACnE,MAAM,IAAI,GAAG,IAAA,gBAAO,EAAC;oBACpB,IAAI,EAAE,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;oBACnD,SAAS,EAAE,IAAA,aAAI,EAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC;iBAC5C,CAAC,CAAC;gBACH,OAAO,IAAA,kBAAM,EACZ,MAAM,4BAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,OAAO,UAAU,EAAE;oBAC5E,IAAI;oBACJ,SAAS;oBACT,KAAK,EAAE,KAAK;iBACZ,CAAC,CACF,CAAC;YACH,CAAC;SACD;QACD;YACC,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,mEAAmE;YAChF,UAAU,EAAE,CAAC,IAAA,uBAAe,GAAE,EAAE,GAAG,IAAA,4BAAmB,EAAC,SAAS,CAAC,CAAC;YAClE,KAAK,CAAC,OAAO,CAAC,SAAS;gBACtB,MAAM,OAAO,GAAG,IAAA,iBAAS,EAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBACnE,OAAO,MAAM,qBAAS,CAAC,IAAI,CAC1B,IAAI,EACJ,gBAAgB,OAAO,UAAU,EACjC,EAAE,EACF,IAAA,mBAAU,EAAC,IAAI,EAAE,SAAS,CAAC,EAC3B,SAAS,CACT,CAAC;YACH,CAAC;SACD;KACD;CACD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Resource } from '../../../shared/spec';
2
+ export declare const PRIVACY_TYPES: {
3
+ name: string;
4
+ value: string;
5
+ description: string;
6
+ }[];
7
+ export declare const projectResource: Resource;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.projectResource = exports.PRIVACY_TYPES = void 0;
4
+ const params_1 = require("../../../shared/params");
5
+ const transport_1 = require("../../../shared/transport");
6
+ const props_1 = require("../props");
7
+ exports.PRIVACY_TYPES = [
8
+ { name: 'Anywhere', value: 'anywhere', description: 'Any site may embed the player' },
9
+ {
10
+ name: 'Listed Domains Only',
11
+ value: 'custom',
12
+ description: 'Only the domains listed in Privacy Domains',
13
+ },
14
+ { name: 'Nowhere', value: 'nowhere', description: 'No site may embed the player' },
15
+ ];
16
+ exports.projectResource = {
17
+ value: 'project',
18
+ name: 'Project',
19
+ description: 'Top-level sections of the Kinescope catalog that hold videos and folders',
20
+ operations: [
21
+ {
22
+ value: 'create',
23
+ name: 'Create',
24
+ action: 'Create a project',
25
+ description: 'Create a project in the catalog for videos or for live streams',
26
+ properties: [
27
+ {
28
+ displayName: 'Name',
29
+ name: 'name',
30
+ type: 'string',
31
+ required: true,
32
+ default: '',
33
+ },
34
+ {
35
+ displayName: 'Additional Fields',
36
+ name: 'additionalFields',
37
+ type: 'collection',
38
+ placeholder: 'Add Field',
39
+ default: {},
40
+ options: [
41
+ {
42
+ displayName: 'Catalog Type',
43
+ name: 'catalogType',
44
+ type: 'options',
45
+ default: 'vod',
46
+ options: [
47
+ { name: 'Videos', value: 'vod' },
48
+ { name: 'Live Streams', value: 'live' },
49
+ ],
50
+ },
51
+ {
52
+ displayName: 'Privacy',
53
+ name: 'privacyType',
54
+ type: 'options',
55
+ default: 'anywhere',
56
+ options: exports.PRIVACY_TYPES,
57
+ },
58
+ {
59
+ displayName: 'Privacy Domains',
60
+ name: 'privacyDomains',
61
+ type: 'string',
62
+ default: '',
63
+ placeholder: 'example.com, school.example.com',
64
+ description: 'Domains that may embed the player, for Listed Domains Only',
65
+ },
66
+ ],
67
+ },
68
+ ],
69
+ async execute(itemIndex) {
70
+ var _a;
71
+ const fields = this.getNodeParameter('additionalFields', itemIndex, {});
72
+ const body = {
73
+ name: (0, params_1.requiredText)(this, 'name', itemIndex, 'Name'),
74
+ privacy_type: String((_a = fields.privacyType) !== null && _a !== void 0 ? _a : 'anywhere') || 'anywhere',
75
+ privacy_domains: (0, params_1.idList)(fields.privacyDomains),
76
+ ...(0, params_1.compact)({ catalog_type: fields.catalogType }),
77
+ };
78
+ return (0, transport_1.dataOf)(await transport_1.kinescopeRequest.call(this, 'POST', '/v1/projects', {
79
+ body,
80
+ itemIndex,
81
+ retry: false,
82
+ }));
83
+ },
84
+ },
85
+ {
86
+ value: 'get',
87
+ name: 'Get',
88
+ action: 'Get a project',
89
+ description: 'Get one project with its folders, size and number of items',
90
+ properties: [(0, props_1.projectProperty)()],
91
+ async execute(itemIndex) {
92
+ const id = (0, props_1.idSegment)(this, 'projectId', itemIndex, 'Project');
93
+ return (0, transport_1.dataOf)(await transport_1.kinescopeRequest.call(this, 'GET', `/v1/projects/${id}`, { itemIndex }));
94
+ },
95
+ },
96
+ {
97
+ value: 'getAll',
98
+ name: 'Get Many',
99
+ action: 'Get many projects',
100
+ description: 'List the projects of the catalog',
101
+ properties: [...(0, params_1.returnAllProperties)('projects'), (0, params_1.orderProperty)('name.asc')],
102
+ async execute(itemIndex) {
103
+ return await transport_1.readPages.call(this, '/v1/projects', (0, params_1.compact)({ order: (0, params_1.text)(this, 'order', itemIndex) }), (0, params_1.wantedRows)(this, itemIndex), itemIndex);
104
+ },
105
+ },
106
+ ],
107
+ };
108
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../../nodes/Kinescope/resources/project.ts"],"names":[],"mappings":"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"}