windmill-components 1.613.5 → 1.623.2

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 (254) hide show
  1. package/package/cancelable-promise-utils.js +4 -2
  2. package/package/components/ApiConnectForm.svelte +6 -0
  3. package/package/components/AppConnectDrawer.svelte +1 -0
  4. package/package/components/AppConnectInner.svelte +1 -0
  5. package/package/components/AuthSettings.svelte +3 -1
  6. package/package/components/BedrockCredentialsCheck.svelte +241 -0
  7. package/package/components/BedrockCredentialsCheck.svelte.d.ts +3 -0
  8. package/package/components/CenteredPage.svelte +2 -1
  9. package/package/components/CenteredPage.svelte.d.ts +1 -0
  10. package/package/components/CompareWorkspaces.svelte +74 -16
  11. package/package/components/DBManager.svelte +35 -31
  12. package/package/components/DBManager.svelte.d.ts +13 -3
  13. package/package/components/DBManagerContent.svelte +23 -62
  14. package/package/components/DBManagerContent.svelte.d.ts +37 -3
  15. package/package/components/DBManagerDrawer.svelte +7 -9
  16. package/package/components/DBTable.svelte +1 -1
  17. package/package/components/DBTable.svelte.d.ts +3 -1
  18. package/package/components/DBTableEditor.svelte +66 -49
  19. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  20. package/package/components/DateInput.svelte +29 -35
  21. package/package/components/DateInput.svelte.d.ts +10 -11
  22. package/package/components/DedicatedWorkersSelector.svelte +569 -0
  23. package/package/components/DedicatedWorkersSelector.svelte.d.ts +8 -0
  24. package/package/components/DeployWorkspace.svelte +106 -29
  25. package/package/components/DropdownV2.svelte +2 -1
  26. package/package/components/DropdownV2.svelte.d.ts +1 -0
  27. package/package/components/Editor.svelte +1 -10
  28. package/package/components/FlowGraphViewer.svelte +5 -2
  29. package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
  30. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  31. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  32. package/package/components/FlowStatusViewerInner.svelte +6 -3
  33. package/package/components/ForkWorkspaceBanner.svelte +16 -0
  34. package/package/components/InfiniteList.svelte +27 -20
  35. package/package/components/InfiniteList.svelte.d.ts +2 -0
  36. package/package/components/JobLoader.svelte.d.ts +1 -1
  37. package/package/components/Login.svelte +6 -0
  38. package/package/components/NextcloudSetting.svelte +1 -1
  39. package/package/components/OAuthSetting.svelte +12 -23
  40. package/package/components/PocketIdSetting.svelte +82 -0
  41. package/package/components/PocketIdSetting.svelte.d.ts +6 -0
  42. package/package/components/ResourceEditor.svelte +4 -4
  43. package/package/components/ResourcePicker.svelte +1 -0
  44. package/package/components/RunForm.svelte +9 -17
  45. package/package/components/RunForm.svelte.d.ts +0 -1
  46. package/package/components/RunsPage.svelte +34 -0
  47. package/package/components/SavedInputsPicker.svelte +1 -1
  48. package/package/components/SavedInputsV2.svelte +35 -36
  49. package/package/components/Section.svelte +1 -1
  50. package/package/components/Star.svelte +8 -12
  51. package/package/components/Star.svelte.d.ts +6 -19
  52. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  53. package/package/components/TimeAgo.svelte +49 -7
  54. package/package/components/TimeAgo.svelte.d.ts +1 -0
  55. package/package/components/Toast.svelte +5 -1
  56. package/package/components/WorkerGroup.svelte +35 -20
  57. package/package/components/WorkerGroup.svelte.d.ts +1 -0
  58. package/package/components/apps/components/display/InsertRowDrawerButton.svelte +1 -1
  59. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +2 -1
  60. package/package/components/apps/components/display/dbtable/dbFeatures.d.ts +9 -0
  61. package/package/components/apps/components/display/dbtable/dbFeatures.js +32 -0
  62. package/package/components/apps/components/display/dbtable/metadata.d.ts +3 -3
  63. package/package/components/apps/components/display/dbtable/metadata.js +120 -130
  64. package/package/components/apps/components/display/dbtable/queries/alterTable.js +13 -5
  65. package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +1 -1
  66. package/package/components/apps/components/display/dbtable/queries/createTable.js +2 -0
  67. package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +1 -3
  68. package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +41 -42
  69. package/package/components/apps/components/display/dbtable/tableEditor.js +18 -0
  70. package/package/components/apps/components/display/dbtable/utils.d.ts +1 -8
  71. package/package/components/apps/components/display/dbtable/utils.js +27 -34
  72. package/package/components/apps/components/display/table/AppAggridTable.svelte +8 -0
  73. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +9 -9
  74. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -1
  75. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +2 -4
  76. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  77. package/package/components/assets/AssetsUsageDrawer.svelte +98 -27
  78. package/package/components/assets/AssetsUsageDrawer.svelte.d.ts +5 -6
  79. package/package/components/assets/lib.d.ts +3 -2
  80. package/package/components/assets/lib.js +3 -1
  81. package/package/components/common/CloseButton.svelte +2 -1
  82. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  83. package/package/components/common/badge/CountBadge.svelte +4 -3
  84. package/package/components/common/badge/CountBadge.svelte.d.ts +1 -0
  85. package/package/components/common/button/Button.svelte +1 -1
  86. package/package/components/common/confirmationModal/ConfirmationModal.svelte +2 -1
  87. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +1 -0
  88. package/package/components/common/drawer/Drawer.svelte +4 -1
  89. package/package/components/common/drawer/DrawerContent.svelte +6 -3
  90. package/package/components/common/drawer/DrawerContent.svelte.d.ts +1 -0
  91. package/package/components/common/modal/Modal2.svelte +1 -0
  92. package/package/components/common/table/AppRow.svelte +4 -1
  93. package/package/components/common/table/FlowRow.svelte +4 -1
  94. package/package/components/common/table/RawAppRow.svelte +4 -1
  95. package/package/components/common/table/Row.svelte +11 -21
  96. package/package/components/common/table/Row.svelte.d.ts +4 -20
  97. package/package/components/common/table/RowIcon.svelte +6 -2
  98. package/package/components/common/table/RowIcon.svelte.d.ts +1 -1
  99. package/package/components/common/table/ScriptRow.svelte +4 -1
  100. package/package/components/copilot/autocomplete/Autocompletor.d.ts +1 -1
  101. package/package/components/copilot/autocomplete/Autocompletor.js +4 -4
  102. package/package/components/copilot/autocomplete/request.js +13 -9
  103. package/package/components/copilot/chat/script/core.js +5 -4
  104. package/package/components/copilot/lib.js +2 -9
  105. package/package/components/copilot/utils.d.ts +5 -0
  106. package/package/components/copilot/utils.js +8 -0
  107. package/package/components/dbOps.d.ts +1 -1
  108. package/package/components/dbOps.js +2 -2
  109. package/package/components/details/DetailPageHeader.svelte +21 -7
  110. package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
  111. package/package/components/details/DetailPageLayout.svelte +10 -1
  112. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  113. package/package/components/flows/conversations/FlowConversationsSidebar.svelte +79 -77
  114. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  115. package/package/components/graph/FlowGraphV2.svelte +7 -1
  116. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +41 -24
  117. package/package/components/home/ItemsList.svelte +2 -1
  118. package/package/components/home/treeViewUtils.js +1 -1
  119. package/package/components/icons/NextcloudIcon.svelte +3 -2
  120. package/package/components/icons/NextcloudIcon.svelte.d.ts +2 -0
  121. package/package/components/icons/PocketIdIcon.svelte +9 -0
  122. package/package/components/icons/PocketIdIcon.svelte.d.ts +9 -0
  123. package/package/components/icons/index.js +3 -1
  124. package/package/components/instanceSettings.d.ts +1 -1
  125. package/package/components/instanceSettings.js +1 -0
  126. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -3
  127. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  128. package/package/components/schema/EditableSchemaWrapper.svelte +2 -2
  129. package/package/components/select/MultiSelect.svelte +1 -1
  130. package/package/components/select/SelectDropdown.svelte +15 -3
  131. package/package/components/settings/ChangeWorkspaceId.svelte +8 -7
  132. package/package/components/settings/CreateToken.svelte +3 -3
  133. package/package/components/settings/WorkspaceUserSettings.svelte +6 -5
  134. package/package/components/sidebar/MenuButton.svelte +13 -5
  135. package/package/components/sidebar/MultiplayerMenu.svelte +2 -2
  136. package/package/components/sidebar/SidebarContent.svelte +32 -4
  137. package/package/components/sidebar/UserMenu.svelte +2 -2
  138. package/package/components/table/DataTable.svelte +6 -2
  139. package/package/components/table/DataTable.svelte.d.ts +1 -0
  140. package/package/components/triggers/AddTriggersButton.svelte +17 -4
  141. package/package/components/triggers/TriggersEditor.svelte +4 -0
  142. package/package/components/triggers/TriggersWrapper.svelte +14 -0
  143. package/package/components/triggers/native/NativeTriggerEditor.svelte +379 -0
  144. package/package/components/triggers/native/NativeTriggerEditor.svelte.d.ts +26 -0
  145. package/package/components/triggers/native/NativeTriggerTable.svelte +155 -0
  146. package/package/components/triggers/native/NativeTriggerTable.svelte.d.ts +16 -0
  147. package/package/components/triggers/native/NativeTriggersPanel.svelte +40 -0
  148. package/package/components/triggers/native/NativeTriggersPanel.svelte.d.ts +15 -0
  149. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte +104 -0
  150. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte.d.ts +18 -0
  151. package/package/components/triggers/native/utils.d.ts +74 -0
  152. package/package/components/triggers/native/utils.js +152 -0
  153. package/package/components/triggers/triggers.svelte.d.ts +2 -1
  154. package/package/components/triggers/triggers.svelte.js +36 -8
  155. package/package/components/triggers/utils.js +18 -5
  156. package/package/components/triggers.d.ts +1 -1
  157. package/package/components/workspaceSettings/AISettings.svelte +2 -1
  158. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +1 -0
  159. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +3 -1
  160. package/package/components/workspaceSettings/DataTableSettings.svelte +2 -1
  161. package/package/components/workspaceSettings/DucklakeSettings.svelte +8 -3
  162. package/package/components/workspaceSettings/OAuthClientConfig.svelte +180 -0
  163. package/package/components/workspaceSettings/OAuthClientConfig.svelte.d.ts +14 -0
  164. package/package/components/workspaceSettings/StorageSettings.svelte +7 -2
  165. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +302 -0
  166. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte.d.ts +3 -0
  167. package/package/consts.js +0 -2
  168. package/package/gen/core/OpenAPI.js +1 -1
  169. package/package/gen/schemas.gen.d.ts +384 -3
  170. package/package/gen/schemas.gen.js +390 -3
  171. package/package/gen/services.gen.d.ts +200 -13
  172. package/package/gen/services.gen.js +383 -24
  173. package/package/gen/types.gen.d.ts +884 -94
  174. package/package/hub.js +2 -2
  175. package/package/hubPaths.json +1 -1
  176. package/package/refreshUser.d.ts +5 -1
  177. package/package/refreshUser.js +20 -30
  178. package/package/storeUtils.js +2 -0
  179. package/package/svelte5Utils.svelte.d.ts +61 -0
  180. package/package/svelte5Utils.svelte.js +170 -0
  181. package/package/utils.js +3 -0
  182. package/package.json +4 -6
  183. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
  184. package/dist/sharedUtils/base.d.ts +0 -1
  185. package/dist/sharedUtils/cloud.d.ts +0 -1
  186. package/dist/sharedUtils/common.d.ts +0 -111
  187. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
  188. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
  189. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
  190. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
  191. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
  192. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
  193. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
  194. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
  195. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
  196. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
  197. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
  198. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
  199. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
  200. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
  201. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
  202. package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
  203. package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
  204. package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
  205. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
  206. package/dist/sharedUtils/components/apps/types.d.ts +0 -274
  207. package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
  208. package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
  209. package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
  210. package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
  211. package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
  212. package/dist/sharedUtils/components/common/index.d.ts +0 -24
  213. package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
  214. package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
  215. package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
  216. package/dist/sharedUtils/components/ducklake.d.ts +0 -1
  217. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
  218. package/dist/sharedUtils/components/icons/index.d.ts +0 -101
  219. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
  220. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
  221. package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
  222. package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
  223. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
  224. package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
  225. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +0 -2
  226. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
  227. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
  228. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
  229. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
  230. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
  231. package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
  232. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
  233. package/dist/sharedUtils/components/triggers.d.ts +0 -20
  234. package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
  235. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
  236. package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
  237. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
  238. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
  239. package/dist/sharedUtils/gen/core/request.d.ts +0 -29
  240. package/dist/sharedUtils/gen/index.d.ts +0 -6
  241. package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
  242. package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
  243. package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
  244. package/dist/sharedUtils/history.svelte.d.ts +0 -9
  245. package/dist/sharedUtils/hub.d.ts +0 -49
  246. package/dist/sharedUtils/jsr.json +0 -6
  247. package/dist/sharedUtils/lib.d.ts +0 -5
  248. package/dist/sharedUtils/lib.es.js +0 -1588
  249. package/dist/sharedUtils/package.json +0 -12
  250. package/dist/sharedUtils/schema.d.ts +0 -3
  251. package/dist/sharedUtils/stores.d.ts +0 -97
  252. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
  253. package/dist/sharedUtils/toast.d.ts +0 -8
  254. package/dist/sharedUtils/utils.d.ts +0 -265
@@ -181,7 +181,7 @@ export function convertDucklakeSettingsToBackend(settings) {
181
181
  </div>
182
182
  {/if}
183
183
 
184
- <DataTable>
184
+ <DataTable containerClass="ducklake-settings-table">
185
185
  <Head>
186
186
  <tr>
187
187
  {#each tableHeadNames as name, i}
@@ -214,7 +214,11 @@ export function convertDucklakeSettingsToBackend(settings) {
214
214
  <code class="px-1 py-0.5 border rounded-md">ATTACH 'ducklake' AS dl;</code> shorthand
215
215
  </Tooltip>
216
216
  {/if}
217
- <TextInput bind:value={ducklake.name} inputProps={{ placeholder: 'Name' }} />
217
+ <TextInput
218
+ bind:value={ducklake.name}
219
+ inputProps={{ placeholder: 'Name' }}
220
+ class="ducklake-name"
221
+ />
218
222
  </Cell>
219
223
  <Cell>
220
224
  <div class="flex gap-2">
@@ -288,11 +292,12 @@ export function convertDucklakeSettingsToBackend(settings) {
288
292
  else delete ducklake.storage.storage
289
293
  }
290
294
  }
291
- class="w-48"
295
+ class="ducklake-workspace-storage-select w-48"
292
296
  inputClass="!placeholder-secondary"
293
297
  />
294
298
  <TextInput
295
299
  inputProps={{ placeholder: 'Data path (defaults to /)' }}
300
+ class="ducklake-storage-data-path"
296
301
  bind:value={ducklake.storage.path}
297
302
  />
298
303
  </div>
@@ -0,0 +1,180 @@
1
+ <script lang="ts">import { sendUserToast } from '../../utils';
2
+ import { Button, Alert } from '../common';
3
+ import Label from '../Label.svelte';
4
+ import { Save, ExternalLink } from 'lucide-svelte';
5
+ import { workspaceStore } from '../../stores';
6
+ let { serviceName, serviceDisplayName, existingConfig, onConfigSaved, redirectUri = $bindable('') } = $props();
7
+ let saving = $state(false);
8
+ let clientId = $state('');
9
+ let clientSecret = $state('');
10
+ let baseUrl = $state('');
11
+ let workspace = $workspaceStore;
12
+ redirectUri = `${window.location.origin}/workspace_settings?tab=native_triggers&service=${serviceName}&workspace=${workspace}`;
13
+ $effect(() => {
14
+ if (existingConfig) {
15
+ clientId = existingConfig.client_id;
16
+ clientSecret = existingConfig.client_secret;
17
+ baseUrl = existingConfig.base_url;
18
+ }
19
+ });
20
+ async function saveConfig() {
21
+ if (!clientId.trim() || !clientSecret.trim() || !baseUrl.trim()) {
22
+ sendUserToast('Please fill in all fields', true);
23
+ return;
24
+ }
25
+ saving = true;
26
+ try {
27
+ const oauthData = {
28
+ client_id: clientId.trim(),
29
+ client_secret: clientSecret.trim(),
30
+ base_url: baseUrl.trim().replace(/\/+$/, ''),
31
+ redirect_uri: redirectUri.trim()
32
+ };
33
+ await onConfigSaved(oauthData);
34
+ resetForm();
35
+ }
36
+ catch (err) {
37
+ sendUserToast(`Failed to configure OAuth client: ${err.message}`, true);
38
+ }
39
+ finally {
40
+ saving = false;
41
+ }
42
+ }
43
+ function resetForm() {
44
+ clientId = '';
45
+ clientSecret = '';
46
+ }
47
+ function copyToClipboard(text, label) {
48
+ navigator.clipboard
49
+ .writeText(text)
50
+ .then(() => {
51
+ sendUserToast(`${label} copied to clipboard`);
52
+ })
53
+ .catch(() => {
54
+ sendUserToast(`Failed to copy ${label}`, true);
55
+ });
56
+ }
57
+ </script>
58
+
59
+ <div class="space-y-4">
60
+ <div class="flex justify-between items-center">
61
+ <h4 class="text-md font-medium text-primary">{serviceDisplayName} OAuth Client Configuration</h4
62
+ >
63
+ </div>
64
+
65
+ {#if !existingConfig}
66
+ <Alert type="warning" title="OAuth client required">
67
+ <p class="text-sm mb-2">
68
+ Before you can connect to {serviceDisplayName}, you need to configure an OAuth client. This
69
+ requires:
70
+ </p>
71
+ <ol class="list-decimal list-inside space-y-1 text-sm">
72
+ <li
73
+ >Create an OAuth2 application in your {serviceDisplayName} instance (Administration settings
74
+ -> Security -> OAuth 2.0 clients)</li
75
+ >
76
+ <li
77
+ >Configure the redirect URI: <code
78
+ class="text-xs bg-gray-100 dark:bg-gray-800 px-1 rounded"
79
+ >{redirectUri ||
80
+ `${window.location.origin}/workspace_settings?tab=integrations&service=${serviceName}`}</code
81
+ ></li
82
+ >
83
+ <li>Enter the client credentials below</li>
84
+ </ol>
85
+ </Alert>
86
+ {/if}
87
+
88
+ <div class="space-y-4">
89
+ <div class="space-y-4">
90
+ <div class="flex flex-col gap-1">
91
+ <Label label="Nextcloud base URL" />
92
+ <p class="text-xs font-normal text-secondary"
93
+ >The base URL of your Nextcloud instance (without trailing slash)</p
94
+ >
95
+ <input
96
+ type="url"
97
+ bind:value={baseUrl}
98
+ placeholder="https://your-nextcloud.example.com"
99
+ class="windmill-input"
100
+ disabled={saving}
101
+ />
102
+ {#if baseUrl}
103
+ <Button
104
+ wrapperClasses="self-start"
105
+ href={`${baseUrl}/settings/admin/security`}
106
+ target="_blank"
107
+ startIcon={{ icon: ExternalLink }}
108
+ >
109
+ {serviceDisplayName} OAuth Settings
110
+ </Button>
111
+ {/if}
112
+ </div>
113
+
114
+ <div class="flex flex-col gap-1">
115
+ <Label label="Redirect URI" />
116
+ <p class="text-xs font-normal text-secondary"
117
+ >Use this URL when creating the OAuth app in {serviceDisplayName}</p
118
+ >
119
+ <div class="flex gap-2">
120
+ <input
121
+ type="url"
122
+ bind:value={redirectUri}
123
+ readonly
124
+ class="windmill-input flex-1 bg-gray-50 dark:bg-gray-900"
125
+ />
126
+ <Button
127
+ size="xs"
128
+ color="light"
129
+ variant="border"
130
+ onclick={() => copyToClipboard(redirectUri, 'Redirect URI')}
131
+ >
132
+ Copy
133
+ </Button>
134
+ </div>
135
+ </div>
136
+
137
+ <div class="flex flex-col gap-1">
138
+ <Label label="Client ID" />
139
+ <input
140
+ type="text"
141
+ bind:value={clientId}
142
+ placeholder="Generated by Nextcloud OAuth app"
143
+ class="windmill-input"
144
+ disabled={saving}
145
+ />
146
+ </div>
147
+
148
+ <div class="flex flex-col gap-1">
149
+ <Label label="Client secret" />
150
+ <input
151
+ type="password"
152
+ bind:value={clientSecret}
153
+ placeholder="Generated by Nextcloud OAuth app"
154
+ class="windmill-input"
155
+ disabled={saving}
156
+ />
157
+ </div>
158
+
159
+ <div class="flex gap-2">
160
+ <Button
161
+ color="blue"
162
+ onclick={saveConfig}
163
+ disabled={saving || !clientId.trim() || !clientSecret.trim() || !baseUrl.trim()}
164
+ startIcon={{ icon: Save }}
165
+ >
166
+ {saving ? 'Saving...' : 'Save configuration'}
167
+ </Button>
168
+ </div>
169
+ </div>
170
+ </div>
171
+
172
+ {#if existingConfig}
173
+ <Alert type="success" title="OAuth client configured">
174
+ <p class="text-sm">
175
+ OAuth client is configured for {serviceDisplayName}. You can now connect this workspace to
176
+ your {serviceDisplayName} instance.
177
+ </p>
178
+ </Alert>
179
+ {/if}
180
+ </div>
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ serviceName: string;
3
+ serviceDisplayName: string;
4
+ existingConfig?: {
5
+ client_id: string;
6
+ client_secret: string;
7
+ base_url: string;
8
+ } | null;
9
+ redirectUri: string;
10
+ onConfigSaved: (oauthData: any) => Promise<void>;
11
+ }
12
+ declare const OAuthClientConfig: import("svelte").Component<Props, {}, "redirectUri">;
13
+ type OAuthClientConfig = ReturnType<typeof OAuthClientConfig>;
14
+ export default OAuthClientConfig;
@@ -104,7 +104,7 @@ function isPermissionsNonDefault(storage) {
104
104
  </Alert>
105
105
  {/if}
106
106
  {#if s3ResourceSettings}
107
- <DataTable containerClass="mt-4">
107
+ <DataTable containerClass="storage-settings-table mt-4">
108
108
  <Head>
109
109
  <tr>
110
110
  {#each tableHeadNames as name, i}
@@ -124,7 +124,11 @@ function isPermissionsNonDefault(storage) {
124
124
  {#if tableRow[0] === null}
125
125
  <TextInput inputProps={{ placeholder: 'Primary storage', disabled: true }} />
126
126
  {:else}
127
- <TextInput bind:value={tableRow[0]} inputProps={{ placeholder: 'Name' }} />
127
+ <TextInput
128
+ bind:value={tableRow[0]}
129
+ inputProps={{ placeholder: 'Name' }}
130
+ class="secondary-storage-name-input"
131
+ />
128
132
  {/if}
129
133
  </Cell>
130
134
  <Cell>
@@ -139,6 +143,7 @@ function isPermissionsNonDefault(storage) {
139
143
  { value: 'gcloud_storage', label: 'Google Cloud Storage' }
140
144
  ]}
141
145
  bind:value={tableRow[1].resourceType}
146
+ id="storage-resource-type-select"
142
147
  class="w-40"
143
148
  />
144
149
  </div>
@@ -0,0 +1,302 @@
1
+ <script lang="ts">import { workspaceStore } from '../../stores';
2
+ import { sendUserToast } from '../../utils';
3
+ import { Button, Alert } from '../common';
4
+ import Skeleton from '../common/skeleton/Skeleton.svelte';
5
+ import Description from '../Description.svelte';
6
+ import { Check, X, ExternalLink, Cog, Plug } from 'lucide-svelte';
7
+ import { NextcloudIcon } from '../icons';
8
+ import { WorkspaceIntegrationService } from '../../gen';
9
+ import OAuthClientConfig from './OAuthClientConfig.svelte';
10
+ import { page } from '$app/stores';
11
+ import { goto } from '$app/navigation';
12
+ const supportedServices = {
13
+ nextcloud: {
14
+ name: 'nextcloud',
15
+ displayName: 'Nextcloud',
16
+ description: 'Connect to Nextcloud for file operations and webhook triggers',
17
+ icon: NextcloudIcon,
18
+ docsUrl: 'https://www.windmill.dev/docs/integrations/nextcloud'
19
+ }
20
+ };
21
+ let integrations = $state([]);
22
+ let loading = $state(false);
23
+ let connecting = $state(null);
24
+ let showingConfig = $state(null);
25
+ let processingCallback = $state(false);
26
+ async function loadIntegrations() {
27
+ if (!$workspaceStore)
28
+ return;
29
+ loading = true;
30
+ try {
31
+ const response = await WorkspaceIntegrationService.listNativeTriggerServices({
32
+ workspace: $workspaceStore
33
+ });
34
+ integrations = response.map((item) => ({
35
+ service_name: item.service_name,
36
+ oauth_data: item.oauth_data || null
37
+ }));
38
+ }
39
+ catch (err) {
40
+ console.error('Failed to load workspace integrations:', err);
41
+ sendUserToast(`Failed to load integrations: ${err.message}`, true);
42
+ }
43
+ finally {
44
+ loading = false;
45
+ }
46
+ }
47
+ async function deleteIntegration(serviceName) {
48
+ if (!$workspaceStore)
49
+ return;
50
+ try {
51
+ await WorkspaceIntegrationService.deleteNativeTriggerService({
52
+ workspace: $workspaceStore,
53
+ serviceName: serviceName
54
+ });
55
+ sendUserToast(`${supportedServices[serviceName]?.displayName} disconnected successfully`);
56
+ loadIntegrations();
57
+ }
58
+ catch (err) {
59
+ sendUserToast(`Failed to disconnect ${supportedServices[serviceName]?.displayName}: ${err.message}`, true);
60
+ }
61
+ }
62
+ async function connectService(serviceName, redirectUri) {
63
+ if (!$workspaceStore)
64
+ return;
65
+ connecting = serviceName;
66
+ try {
67
+ const auth_url = await WorkspaceIntegrationService.generateNativeTriggerServiceConnectUrl({
68
+ workspace: $workspaceStore,
69
+ serviceName: serviceName,
70
+ requestBody: { redirect_uri: redirectUri }
71
+ });
72
+ if (auth_url) {
73
+ window.location.href = auth_url;
74
+ }
75
+ }
76
+ catch (err) {
77
+ sendUserToast(`Failed to connect ${supportedServices[serviceName]?.displayName}: ${err.message}`, true);
78
+ connecting = null;
79
+ }
80
+ }
81
+ async function createOrUpdateIntegration(serviceName, oauthData) {
82
+ if (!$workspaceStore)
83
+ return;
84
+ try {
85
+ await WorkspaceIntegrationService.createNativeTriggerService({
86
+ workspace: $workspaceStore,
87
+ serviceName: serviceName,
88
+ requestBody: oauthData
89
+ });
90
+ sendUserToast(`${supportedServices[serviceName]?.displayName} configuration saved successfully`);
91
+ loadIntegrations();
92
+ }
93
+ catch (err) {
94
+ sendUserToast(`Failed to configure ${supportedServices[serviceName]?.displayName}: ${err.message}`, true);
95
+ }
96
+ }
97
+ function isConfigured(integration) {
98
+ return (integration.oauth_data !== null &&
99
+ !!integration.oauth_data.client_id &&
100
+ !!integration.oauth_data.client_secret &&
101
+ !!integration.oauth_data.base_url);
102
+ }
103
+ function isConnected(integration) {
104
+ return isConfigured(integration) && !!integration.oauth_data?.access_token;
105
+ }
106
+ function getIntegrationByService(serviceName) {
107
+ return integrations.find((integration) => integration.service_name === serviceName) || null;
108
+ }
109
+ async function handleOAuthCallback(workspace, serviceName, code, state) {
110
+ console.log({ workspace, serviceName, code, state });
111
+ processingCallback = true;
112
+ try {
113
+ if (serviceName) {
114
+ await WorkspaceIntegrationService.nativeTriggerServiceCallback({
115
+ serviceName,
116
+ workspace,
117
+ code,
118
+ state,
119
+ requestBody: { redirect_uri: $page.url.toString() }
120
+ });
121
+ sendUserToast(`${supportedServices[serviceName]?.displayName} connected successfully!`);
122
+ await loadIntegrations();
123
+ }
124
+ else {
125
+ sendUserToast(`Could not handle callback missing service query args`, true);
126
+ }
127
+ }
128
+ catch (err) {
129
+ sendUserToast(`Failed to complete OAuth connection: ${err.message}`, true);
130
+ }
131
+ finally {
132
+ const url = new URL($page.url);
133
+ url.searchParams.delete('code');
134
+ url.searchParams.delete('state');
135
+ url.searchParams.delete('service');
136
+ url.searchParams.delete('workspace');
137
+ processingCallback = false;
138
+ goto(url.toString(), { replaceState: true, noScroll: true, keepFocus: true });
139
+ }
140
+ }
141
+ $effect(() => {
142
+ if ($page.url.searchParams.has('code') &&
143
+ $page.url.searchParams.has('state') &&
144
+ $page.url.searchParams.has('workspace') &&
145
+ $page.url.searchParams.has('service')) {
146
+ const service = $page.url.searchParams.get('service');
147
+ const workspace = $page.url.searchParams.get('workspace');
148
+ const code = $page.url.searchParams.get('code');
149
+ const state = $page.url.searchParams.get('state');
150
+ handleOAuthCallback(workspace, service, code, state);
151
+ }
152
+ });
153
+ let redirectUri = $state('');
154
+ $effect(() => {
155
+ if ($workspaceStore) {
156
+ loadIntegrations();
157
+ }
158
+ });
159
+ </script>
160
+
161
+ <div class="flex flex-col gap-6 my-8">
162
+ <div class="flex flex-col gap-1">
163
+ <div class="text-sm font-semibold text-emphasis">Native Triggers (Beta)</div>
164
+ <Description>
165
+ Connect your workspace to external services for native triggers and enhanced functionality.
166
+ These connections are shared across all workspace members and are required for native triggers
167
+ to work.
168
+ </Description>
169
+ <Description link="https://www.windmill.dev/docs/integrations/native-triggers">
170
+ Learn more about native triggers and workspace integrations.
171
+ </Description>
172
+ </div>
173
+
174
+ <Alert type="warning" title="Beta Feature">
175
+ <p>Native Triggers is currently in beta. Nextcloud integration requires:</p>
176
+ <ul class="list-disc pl-4 mt-2 space-y-1">
177
+ <li>
178
+ <a
179
+ href="https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html#pretty-urls"
180
+ target="_blank"
181
+ rel="noopener noreferrer"
182
+ class="underline hover:text-blue-600"
183
+ >
184
+ Pretty URLs
185
+ </a>
186
+ to be enabled on your Nextcloud instance.
187
+ </li>
188
+ <li>The Windmill integration app to be installed on your Nextcloud instance (not yet released).</li>
189
+ </ul>
190
+ </Alert>
191
+
192
+ {#if processingCallback}
193
+ <Alert type="info" title="Processing OAuth connection">
194
+ <p class="text-sm">Completing your OAuth connection, please wait...</p>
195
+ </Alert>
196
+ {:else if loading}
197
+ <div class="space-y-4">
198
+ {#each new Array(3) as _}
199
+ <Skeleton layout={[[6], 0.4]} />
200
+ {/each}
201
+ </div>
202
+ {:else}
203
+ <div class="space-y-4">
204
+ {#each Object.entries(supportedServices) as [serviceName, config]}
205
+ {@const integration = getIntegrationByService(serviceName)}
206
+ {@const isConnecting = connecting === serviceName}
207
+ {@const isOAuthConfigured = integration && isConfigured(integration)}
208
+ {@const isServiceConnected = integration && isConnected(integration)}
209
+ {@const isShowingConfig = showingConfig === serviceName}
210
+
211
+ <div class="border border-gray-200 dark:border-gray-700 rounded-lg p-4 bg-surface">
212
+ <div class="flex items-center justify-between">
213
+ <div class="flex items-center gap-3">
214
+ <div class="w-8 h-8 flex items-center justify-center">
215
+ <config.icon class="w-6 h-6" />
216
+ </div>
217
+ <div class="flex flex-col">
218
+ <div class="text-sm font-semibold text-emphasis">{config.displayName}</div>
219
+ <div class="text-xs font-normal text-primary">{config.description}</div>
220
+ </div>
221
+ </div>
222
+
223
+ <div class="flex items-center gap-2">
224
+ {#if isServiceConnected}
225
+ <div class="flex items-center gap-1 text-green-600 text-xs">
226
+ <Check size={16} />
227
+ <span class="font-semibold">Connected</span>
228
+ </div>
229
+ <Button
230
+ onclick={() => connectService(serviceName, redirectUri)}
231
+ disabled={isConnecting}
232
+ startIcon={{ icon: Plug }}
233
+ >
234
+ {isConnecting ? 'Reconnecting...' : 'Reconnect'}
235
+ </Button>
236
+ <Button
237
+ destructive
238
+ onclick={() => deleteIntegration(serviceName)}
239
+ startIcon={{ icon: X }}
240
+ >
241
+ Delete
242
+ </Button>
243
+ {:else if isOAuthConfigured}
244
+ <Button
245
+ variant="accent"
246
+ onclick={() => connectService(serviceName, redirectUri)}
247
+ disabled={isConnecting}
248
+ startIcon={{ icon: Plug }}
249
+ >
250
+ {isConnecting ? 'Connecting...' : 'Connect'}
251
+ </Button>
252
+ <Button
253
+ destructive
254
+ onclick={() => deleteIntegration(serviceName)}
255
+ startIcon={{ icon: X }}
256
+ >
257
+ Delete
258
+ </Button>
259
+ {:else}
260
+ <Button
261
+ variant="accent"
262
+ onclick={() =>
263
+ (showingConfig = showingConfig === serviceName ? null : serviceName)}
264
+ startIcon={{ icon: Cog }}
265
+ >
266
+ Configure OAuth
267
+ </Button>
268
+ {/if}
269
+
270
+ {#if config.docsUrl}
271
+ <Button href={config.docsUrl} target="_blank" startIcon={{ icon: ExternalLink }}>
272
+ Docs
273
+ </Button>
274
+ {/if}
275
+ </div>
276
+ </div>
277
+
278
+ {#if isShowingConfig}
279
+ <div class="mt-3 pt-3 border-t border-gray-200 dark:border-gray-700">
280
+ <OAuthClientConfig
281
+ {serviceName}
282
+ bind:redirectUri
283
+ serviceDisplayName={config.displayName}
284
+ existingConfig={integration?.oauth_data}
285
+ onConfigSaved={async (oauthData) => {
286
+ await createOrUpdateIntegration(serviceName, oauthData)
287
+ showingConfig = null
288
+ }}
289
+ />
290
+ </div>
291
+ {/if}
292
+ </div>
293
+ {/each}
294
+ </div>
295
+
296
+ {#if integrations.length === 0}
297
+ <Alert type="warning" title="No Integrations Connected">
298
+ Connect to external services above to enable native triggers for your workspace.
299
+ </Alert>
300
+ {/if}
301
+ {/if}
302
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const WorkspaceIntegrations: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type WorkspaceIntegrations = ReturnType<typeof WorkspaceIntegrations>;
3
+ export default WorkspaceIntegrations;
package/package/consts.js CHANGED
@@ -135,8 +135,6 @@ export const BIGQUERY_TYPES = [
135
135
  'integer[]',
136
136
  'int64',
137
137
  'int64[]',
138
- 'float',
139
- 'float[]',
140
138
  'float64',
141
139
  'float64[]',
142
140
  'numeric',
@@ -21,7 +21,7 @@ export const OpenAPI = {
21
21
  PASSWORD: undefined,
22
22
  TOKEN: undefined,
23
23
  USERNAME: undefined,
24
- VERSION: '1.613.0',
24
+ VERSION: '1.623.1',
25
25
  WITH_CREDENTIALS: false,
26
26
  interceptors: {
27
27
  request: new Interceptors(),