@alchemy.run/daytona 0.0.0-stage → 2.0.0-beta.86

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 (274) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +80 -2
  3. package/lib/ApiKey.d.ts +99 -0
  4. package/lib/ApiKey.d.ts.map +1 -0
  5. package/lib/ApiKey.js +152 -0
  6. package/lib/ApiKey.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +55 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +280 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/Bootstrap.d.ts +8 -0
  12. package/lib/Bootstrap.d.ts.map +1 -0
  13. package/lib/Bootstrap.js +28 -0
  14. package/lib/Bootstrap.js.map +1 -0
  15. package/lib/ConnectSandbox.d.ts +72 -0
  16. package/lib/ConnectSandbox.d.ts.map +1 -0
  17. package/lib/ConnectSandbox.js +3 -0
  18. package/lib/ConnectSandbox.js.map +1 -0
  19. package/lib/ConnectSandboxHttp.d.ts +5 -0
  20. package/lib/ConnectSandboxHttp.d.ts.map +1 -0
  21. package/lib/ConnectSandboxHttp.js +22 -0
  22. package/lib/ConnectSandboxHttp.js.map +1 -0
  23. package/lib/Contributions.d.ts +7 -0
  24. package/lib/Contributions.d.ts.map +1 -0
  25. package/lib/Contributions.js +6 -0
  26. package/lib/Contributions.js.map +1 -0
  27. package/lib/CreateSandbox.d.ts +86 -0
  28. package/lib/CreateSandbox.d.ts.map +1 -0
  29. package/lib/CreateSandbox.js +3 -0
  30. package/lib/CreateSandbox.js.map +1 -0
  31. package/lib/CreateSandboxHttp.d.ts +5 -0
  32. package/lib/CreateSandboxHttp.d.ts.map +1 -0
  33. package/lib/CreateSandboxHttp.js +65 -0
  34. package/lib/CreateSandboxHttp.js.map +1 -0
  35. package/lib/CreateSecret.d.ts +56 -0
  36. package/lib/CreateSecret.d.ts.map +1 -0
  37. package/lib/CreateSecret.js +3 -0
  38. package/lib/CreateSecret.js.map +1 -0
  39. package/lib/CreateSecretHttp.d.ts +5 -0
  40. package/lib/CreateSecretHttp.d.ts.map +1 -0
  41. package/lib/CreateSecretHttp.js +39 -0
  42. package/lib/CreateSecretHttp.js.map +1 -0
  43. package/lib/CreateSnapshot.d.ts +80 -0
  44. package/lib/CreateSnapshot.d.ts.map +1 -0
  45. package/lib/CreateSnapshot.js +3 -0
  46. package/lib/CreateSnapshot.js.map +1 -0
  47. package/lib/CreateSnapshotHttp.d.ts +5 -0
  48. package/lib/CreateSnapshotHttp.d.ts.map +1 -0
  49. package/lib/CreateSnapshotHttp.js +47 -0
  50. package/lib/CreateSnapshotHttp.js.map +1 -0
  51. package/lib/CreateVolume.d.ts +81 -0
  52. package/lib/CreateVolume.d.ts.map +1 -0
  53. package/lib/CreateVolume.js +10 -0
  54. package/lib/CreateVolume.js.map +1 -0
  55. package/lib/CreateVolumeHttp.d.ts +5 -0
  56. package/lib/CreateVolumeHttp.d.ts.map +1 -0
  57. package/lib/CreateVolumeHttp.js +31 -0
  58. package/lib/CreateVolumeHttp.js.map +1 -0
  59. package/lib/Credentials.d.ts +9 -0
  60. package/lib/Credentials.d.ts.map +1 -0
  61. package/lib/Credentials.js +18 -0
  62. package/lib/Credentials.js.map +1 -0
  63. package/lib/DaytonaBindings.d.ts +51 -0
  64. package/lib/DaytonaBindings.d.ts.map +1 -0
  65. package/lib/DaytonaBindings.js +61 -0
  66. package/lib/DaytonaBindings.js.map +1 -0
  67. package/lib/IdentityProvider.d.ts +80 -0
  68. package/lib/IdentityProvider.d.ts.map +1 -0
  69. package/lib/IdentityProvider.js +111 -0
  70. package/lib/IdentityProvider.js.map +1 -0
  71. package/lib/MountVolume.d.ts +86 -0
  72. package/lib/MountVolume.d.ts.map +1 -0
  73. package/lib/MountVolume.js +27 -0
  74. package/lib/MountVolume.js.map +1 -0
  75. package/lib/OAuthClient.d.ts +14 -0
  76. package/lib/OAuthClient.d.ts.map +1 -0
  77. package/lib/OAuthClient.js +23 -0
  78. package/lib/OAuthClient.js.map +1 -0
  79. package/lib/Organization.d.ts +40 -0
  80. package/lib/Organization.d.ts.map +1 -0
  81. package/lib/Organization.js +80 -0
  82. package/lib/Organization.js.map +1 -0
  83. package/lib/OrganizationInvitation.d.ts +70 -0
  84. package/lib/OrganizationInvitation.d.ts.map +1 -0
  85. package/lib/OrganizationInvitation.js +109 -0
  86. package/lib/OrganizationInvitation.js.map +1 -0
  87. package/lib/OrganizationMember.d.ts +86 -0
  88. package/lib/OrganizationMember.d.ts.map +1 -0
  89. package/lib/OrganizationMember.js +109 -0
  90. package/lib/OrganizationMember.js.map +1 -0
  91. package/lib/OrganizationOtelConfig.d.ts +59 -0
  92. package/lib/OrganizationOtelConfig.d.ts.map +1 -0
  93. package/lib/OrganizationOtelConfig.js +87 -0
  94. package/lib/OrganizationOtelConfig.js.map +1 -0
  95. package/lib/OrganizationRole.d.ts +66 -0
  96. package/lib/OrganizationRole.d.ts.map +1 -0
  97. package/lib/OrganizationRole.js +106 -0
  98. package/lib/OrganizationRole.js.map +1 -0
  99. package/lib/OrganizationSettings.d.ts +76 -0
  100. package/lib/OrganizationSettings.d.ts.map +1 -0
  101. package/lib/OrganizationSettings.js +107 -0
  102. package/lib/OrganizationSettings.js.map +1 -0
  103. package/lib/Providers.d.ts +14 -0
  104. package/lib/Providers.d.ts.map +1 -0
  105. package/lib/Providers.js +53 -0
  106. package/lib/Providers.js.map +1 -0
  107. package/lib/ReadAuditLogs.d.ts +30 -0
  108. package/lib/ReadAuditLogs.d.ts.map +1 -0
  109. package/lib/ReadAuditLogs.js +17 -0
  110. package/lib/ReadAuditLogs.js.map +1 -0
  111. package/lib/ReadOrganization.d.ts +39 -0
  112. package/lib/ReadOrganization.d.ts.map +1 -0
  113. package/lib/ReadOrganization.js +39 -0
  114. package/lib/ReadOrganization.js.map +1 -0
  115. package/lib/ReadUsage.d.ts +31 -0
  116. package/lib/ReadUsage.d.ts.map +1 -0
  117. package/lib/ReadUsage.js +17 -0
  118. package/lib/ReadUsage.js.map +1 -0
  119. package/lib/Region.d.ts +78 -0
  120. package/lib/Region.d.ts.map +1 -0
  121. package/lib/Region.js +169 -0
  122. package/lib/Region.js.map +1 -0
  123. package/lib/Registry.d.ts +84 -0
  124. package/lib/Registry.d.ts.map +1 -0
  125. package/lib/Registry.js +97 -0
  126. package/lib/Registry.js.map +1 -0
  127. package/lib/Runner.d.ts +66 -0
  128. package/lib/Runner.d.ts.map +1 -0
  129. package/lib/Runner.js +116 -0
  130. package/lib/Runner.js.map +1 -0
  131. package/lib/Sandbox.d.ts +376 -0
  132. package/lib/Sandbox.d.ts.map +1 -0
  133. package/lib/Sandbox.js +565 -0
  134. package/lib/Sandbox.js.map +1 -0
  135. package/lib/SandboxClient.d.ts +258 -0
  136. package/lib/SandboxClient.d.ts.map +1 -0
  137. package/lib/SandboxClient.js +233 -0
  138. package/lib/SandboxClient.js.map +1 -0
  139. package/lib/Secret.d.ts +93 -0
  140. package/lib/Secret.d.ts.map +1 -0
  141. package/lib/Secret.js +130 -0
  142. package/lib/Secret.js.map +1 -0
  143. package/lib/Snapshot.d.ts +327 -0
  144. package/lib/Snapshot.d.ts.map +1 -0
  145. package/lib/Snapshot.js +447 -0
  146. package/lib/Snapshot.js.map +1 -0
  147. package/lib/Volume.d.ts +99 -0
  148. package/lib/Volume.d.ts.map +1 -0
  149. package/lib/Volume.js +152 -0
  150. package/lib/Volume.js.map +1 -0
  151. package/lib/WarmPool.d.ts +61 -0
  152. package/lib/WarmPool.d.ts.map +1 -0
  153. package/lib/WarmPool.js +81 -0
  154. package/lib/WarmPool.js.map +1 -0
  155. package/lib/Webhooks.d.ts +58 -0
  156. package/lib/Webhooks.d.ts.map +1 -0
  157. package/lib/Webhooks.js +75 -0
  158. package/lib/Webhooks.js.map +1 -0
  159. package/lib/index.d.ts +37 -0
  160. package/lib/index.d.ts.map +1 -0
  161. package/lib/index.js +36 -0
  162. package/lib/index.js.map +1 -0
  163. package/lib/internal/BuildContext.d.ts +16 -0
  164. package/lib/internal/BuildContext.d.ts.map +1 -0
  165. package/lib/internal/BuildContext.js +50 -0
  166. package/lib/internal/BuildContext.js.map +1 -0
  167. package/lib/internal/Declared.d.ts +29 -0
  168. package/lib/internal/Declared.d.ts.map +1 -0
  169. package/lib/internal/Declared.js +31 -0
  170. package/lib/internal/Declared.js.map +1 -0
  171. package/lib/internal/Derived.d.ts +40 -0
  172. package/lib/internal/Derived.d.ts.map +1 -0
  173. package/lib/internal/Derived.js +64 -0
  174. package/lib/internal/Derived.js.map +1 -0
  175. package/lib/internal/Errors.d.ts +4 -0
  176. package/lib/internal/Errors.d.ts.map +1 -0
  177. package/lib/internal/Errors.js +1 -0
  178. package/lib/internal/Errors.js.map +1 -0
  179. package/lib/internal/Labels.d.ts +20 -0
  180. package/lib/internal/Labels.d.ts.map +1 -0
  181. package/lib/internal/Labels.js +22 -0
  182. package/lib/internal/Labels.js.map +1 -0
  183. package/lib/internal/Names.d.ts +18 -0
  184. package/lib/internal/Names.d.ts.map +1 -0
  185. package/lib/internal/Names.js +25 -0
  186. package/lib/internal/Names.js.map +1 -0
  187. package/lib/internal/Organization.d.ts +27 -0
  188. package/lib/internal/Organization.d.ts.map +1 -0
  189. package/lib/internal/Organization.js +32 -0
  190. package/lib/internal/Organization.js.map +1 -0
  191. package/lib/internal/Process.d.ts +14 -0
  192. package/lib/internal/Process.d.ts.map +1 -0
  193. package/lib/internal/Process.js +15 -0
  194. package/lib/internal/Process.js.map +1 -0
  195. package/lib/internal/Program.d.ts +83 -0
  196. package/lib/internal/Program.d.ts.map +1 -0
  197. package/lib/internal/Program.js +169 -0
  198. package/lib/internal/Program.js.map +1 -0
  199. package/lib/internal/Ref.d.ts +14 -0
  200. package/lib/internal/Ref.d.ts.map +1 -0
  201. package/lib/internal/Ref.js +7 -0
  202. package/lib/internal/Ref.js.map +1 -0
  203. package/lib/internal/Scoped.d.ts +31 -0
  204. package/lib/internal/Scoped.d.ts.map +1 -0
  205. package/lib/internal/Scoped.js +48 -0
  206. package/lib/internal/Scoped.js.map +1 -0
  207. package/lib/internal/Tar.d.ts +13 -0
  208. package/lib/internal/Tar.d.ts.map +1 -0
  209. package/lib/internal/Tar.js +62 -0
  210. package/lib/internal/Tar.js.map +1 -0
  211. package/lib/internal/Toolbox.d.ts +11 -0
  212. package/lib/internal/Toolbox.d.ts.map +1 -0
  213. package/lib/internal/Toolbox.js +20 -0
  214. package/lib/internal/Toolbox.js.map +1 -0
  215. package/lib/internal/Wait.d.ts +49 -0
  216. package/lib/internal/Wait.d.ts.map +1 -0
  217. package/lib/internal/Wait.js +57 -0
  218. package/lib/internal/Wait.js.map +1 -0
  219. package/package.json +79 -3
  220. package/src/ApiKey.ts +221 -0
  221. package/src/AuthProvider.ts +406 -0
  222. package/src/Bootstrap.ts +55 -0
  223. package/src/ConnectSandbox.ts +76 -0
  224. package/src/ConnectSandboxHttp.ts +26 -0
  225. package/src/Contributions.ts +9 -0
  226. package/src/CreateSandbox.ts +107 -0
  227. package/src/CreateSandboxHttp.ts +97 -0
  228. package/src/CreateSecret.ts +73 -0
  229. package/src/CreateSecretHttp.ts +58 -0
  230. package/src/CreateSnapshot.ts +133 -0
  231. package/src/CreateSnapshotHttp.ts +77 -0
  232. package/src/CreateVolume.ts +104 -0
  233. package/src/CreateVolumeHttp.ts +50 -0
  234. package/src/Credentials.ts +37 -0
  235. package/src/DaytonaBindings.ts +111 -0
  236. package/src/IdentityProvider.ts +181 -0
  237. package/src/MountVolume.ts +122 -0
  238. package/src/OAuthClient.ts +27 -0
  239. package/src/Organization.ts +121 -0
  240. package/src/OrganizationInvitation.ts +174 -0
  241. package/src/OrganizationMember.ts +174 -0
  242. package/src/OrganizationOtelConfig.ts +138 -0
  243. package/src/OrganizationRole.ts +167 -0
  244. package/src/OrganizationSettings.ts +187 -0
  245. package/src/Providers.ts +93 -0
  246. package/src/ReadAuditLogs.ts +50 -0
  247. package/src/ReadOrganization.ts +83 -0
  248. package/src/ReadUsage.ts +51 -0
  249. package/src/Region.ts +226 -0
  250. package/src/Registry.ts +164 -0
  251. package/src/Runner.ts +166 -0
  252. package/src/Sandbox.ts +927 -0
  253. package/src/SandboxClient.ts +625 -0
  254. package/src/Secret.ts +203 -0
  255. package/src/Snapshot.ts +685 -0
  256. package/src/Volume.ts +229 -0
  257. package/src/WarmPool.ts +128 -0
  258. package/src/Webhooks.ts +121 -0
  259. package/src/globals.d.ts +2 -0
  260. package/src/index.ts +46 -0
  261. package/src/internal/BuildContext.ts +62 -0
  262. package/src/internal/Declared.ts +80 -0
  263. package/src/internal/Derived.ts +97 -0
  264. package/src/internal/Errors.ts +4 -0
  265. package/src/internal/Labels.ts +39 -0
  266. package/src/internal/Names.ts +37 -0
  267. package/src/internal/Organization.ts +40 -0
  268. package/src/internal/Process.ts +25 -0
  269. package/src/internal/Program.ts +239 -0
  270. package/src/internal/Ref.ts +15 -0
  271. package/src/internal/Scoped.ts +102 -0
  272. package/src/internal/Tar.ts +72 -0
  273. package/src/internal/Toolbox.ts +27 -0
  274. package/src/internal/Wait.ts +105 -0
@@ -0,0 +1,106 @@
1
+ import * as organizations from "@distilled.cloud/daytona/organizations";
2
+ import { Unowned } from "alchemy/AdoptPolicy";
3
+ import { deepEqual, isResolved } from "alchemy/Diff";
4
+ import * as Provider from "alchemy/Provider";
5
+ import { Resource } from "alchemy/Resource";
6
+ import * as Effect from "effect/Effect";
7
+ import { declarable } from "./internal/Declared.js";
8
+ import { isOwnedName, resolveName } from "./internal/Names.js";
9
+ import { currentOrganizationId, movesOrganization, organizationIdFor, } from "./internal/Organization.js";
10
+ /**
11
+ * A custom role in the Daytona organization: a named set of permissions to
12
+ * give members, through {@link OrganizationInvitation} or
13
+ * {@link OrganizationMember}.
14
+ * @see https://www.daytona.io/docs/en/organizations/
15
+ *
16
+ * ### Creating a Role
17
+ * **Example:** A role that can run sandboxes but not manage images
18
+ * ```typescript
19
+ * export const Developer = Daytona.OrganizationRole("Developer", {
20
+ * description: "Run sandboxes",
21
+ * permissions: ["write:sandboxes", "delete:sandboxes", "read:volumes"],
22
+ * });
23
+ * ```
24
+ *
25
+ * @resource
26
+ * @product Organization
27
+ */
28
+ export const OrganizationRole = declarable()(Resource("Daytona.OrganizationRole"));
29
+ const toAttributes = (organizationId, r) => ({
30
+ roleId: r.id,
31
+ organizationId,
32
+ name: r.name,
33
+ description: r.description,
34
+ permissions: r.permissions,
35
+ });
36
+ const listRoles = (organizationId) => organizations.listOrganizationRoles({ organizationId });
37
+ const sorted = (permissions) => [...permissions].sort();
38
+ export const OrganizationRoleProvider = () => Provider.effect(OrganizationRole, Effect.succeed({
39
+ stables: ["roleId", "organizationId"],
40
+ list: Effect.fn(function* () {
41
+ const organizationId = yield* currentOrganizationId;
42
+ const roles = yield* listRoles(organizationId);
43
+ return roles.filter((r) => !r.isGlobal).map((r) => toAttributes(organizationId, r));
44
+ }),
45
+ diff: Effect.fn(function* ({ news, output }) {
46
+ if (!isResolved(news) || output === undefined)
47
+ return undefined;
48
+ if (yield* movesOrganization(news.organization, output))
49
+ return { action: "replace" };
50
+ }),
51
+ read: Effect.fn(function* ({ id, olds, output }) {
52
+ const organizationId = output?.organizationId ?? (yield* currentOrganizationId);
53
+ const name = yield* resolveName(id, olds?.name, output?.name);
54
+ const roles = yield* listRoles(organizationId);
55
+ const found = roles.find((r) => r.id === output?.roleId) ?? roles.find((r) => r.name === name);
56
+ if (found === undefined)
57
+ return undefined;
58
+ const attrs = toAttributes(organizationId, found);
59
+ return (yield* isOwnedName(id, found.name, output !== undefined)) ? attrs : Unowned(attrs);
60
+ }),
61
+ reconcile: Effect.fn(function* ({ id, news, output }) {
62
+ const organizationId = yield* organizationIdFor(news.organization);
63
+ const name = yield* resolveName(id, news.name, output?.name);
64
+ const description = news.description ?? "";
65
+ // Observe
66
+ const roles = yield* listRoles(organizationId);
67
+ const current = roles.find((r) => r.id === output?.roleId) ?? roles.find((r) => r.name === name);
68
+ // Ensure
69
+ if (current === undefined) {
70
+ const created = yield* organizations
71
+ .createOrganizationRole({
72
+ organizationId,
73
+ name,
74
+ description,
75
+ permissions: news.permissions,
76
+ })
77
+ .pipe(Effect.catchTag("OrganizationRoleAlreadyExists", () => Effect.undefined));
78
+ if (created)
79
+ return toAttributes(organizationId, created);
80
+ }
81
+ const existing = current ?? (yield* listRoles(organizationId)).find((r) => r.name === name);
82
+ if (existing === undefined) {
83
+ return yield* Effect.die(`Daytona role ${name} vanished during create`);
84
+ }
85
+ // Sync against observed state.
86
+ if (existing.name === name &&
87
+ existing.description === description &&
88
+ deepEqual(sorted(existing.permissions), sorted(news.permissions))) {
89
+ return toAttributes(organizationId, existing);
90
+ }
91
+ const updated = yield* organizations.updateOrganizationRole({
92
+ organizationId,
93
+ roleId: existing.id,
94
+ name,
95
+ description,
96
+ permissions: news.permissions,
97
+ });
98
+ return toAttributes(organizationId, updated);
99
+ }),
100
+ delete: Effect.fn(function* ({ output }) {
101
+ yield* organizations
102
+ .deleteOrganizationRole({ organizationId: output.organizationId, roleId: output.roleId })
103
+ .pipe(Effect.catchTag("OrganizationRoleNotFound", () => Effect.void));
104
+ }),
105
+ }));
106
+ //# sourceMappingURL=OrganizationRole.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationRole.js","sources":["../src/OrganizationRole.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import * as organizations from "@distilled.cloud/daytona/organizations";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import * as Duration from "effect/Duration";
5
+ import * as Effect from "effect/Effect";
6
+ import { type OrganizationRef } from "./internal/Organization.ts";
7
+ import type { Ref } from "./internal/Ref.ts";
8
+ import type { Providers } from "./Providers.ts";
9
+ export interface OrganizationSettingsProps {
10
+ /**
11
+ * Organization to act on, e.g. a `Daytona.Organization`. Defaults to the
12
+ * credentials' organization. Changing it replaces the resource.
13
+ */
14
+ organization?: Ref<OrganizationRef>;
15
+ /** Region new sandboxes go to when they don't name one. */
16
+ defaultRegionId?: string;
17
+ /**
18
+ * How long a sandbox create may wait in the queue for capacity before it
19
+ * fails. `null` waits indefinitely.
20
+ */
21
+ defaultQueueTimeout?: Duration.Input | null;
22
+ /** Experimental feature flags, as Daytona names them. */
23
+ experimentalConfig?: Record<string, unknown>;
24
+ }
25
+ interface Captured {
26
+ defaultRegionId: string | undefined;
27
+ defaultQueueTimeout: number | null;
28
+ experimentalConfig: unknown;
29
+ }
30
+ export interface OrganizationSettingsAttributes {
31
+ /** Organization ID. */
32
+ organizationId: string;
33
+ /** Organization name. */
34
+ name: string;
35
+ /** Default region. */
36
+ defaultRegionId: string | undefined;
37
+ /** Default queue timeout in seconds, or `null`. */
38
+ defaultQueueTimeout: number | null;
39
+ /** Experimental flags. */
40
+ experimentalConfig: unknown;
41
+ /** The settings before alchemy first changed them; restored on destroy. */
42
+ original: Captured;
43
+ }
44
+ export type OrganizationSettings = Resource<"Daytona.OrganizationSettings", OrganizationSettingsProps, OrganizationSettingsAttributes, never, Providers>;
45
+ /**
46
+ * Settings of the Daytona organization the credentials belong to: the
47
+ * default region, the queue timeout for creates waiting on capacity, and
48
+ * experimental flags. Only the settings you declare are changed.
49
+ *
50
+ * The organization always exists, so this resource captures the settings
51
+ * it finds on first deploy and puts them back on destroy.
52
+ *
53
+ * ### Configuring the Organization
54
+ * **Example:** Default region and a one-minute queue timeout
55
+ * ```typescript
56
+ * export const Settings = Daytona.OrganizationSettings("Settings", {
57
+ * defaultRegionId: "eu",
58
+ * defaultQueueTimeout: "1 minute",
59
+ * });
60
+ * ```
61
+ *
62
+ * @resource
63
+ * @product Organization
64
+ */
65
+ export declare const OrganizationSettings: import("alchemy/Resource").ResourceConstructor<OrganizationSettings, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<OrganizationSettings, never>, never, never> & {
66
+ Self: import("alchemy/Self").Self<OrganizationSettings>;
67
+ Provider: Provider.Provider<OrganizationSettings>;
68
+ Aliases: readonly string[] | undefined;
69
+ ref(id: string, options?: {
70
+ stage?: string;
71
+ stack?: string;
72
+ }): Effect.Effect<OrganizationSettings, never, never>;
73
+ } & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<OrganizationSettingsProps>) => Effect.Effect<OrganizationSettings, never, Providers>);
74
+ export declare const OrganizationSettingsProvider: () => import("effect/Layer").Layer<Provider.Provider<OrganizationSettings>, never, organizations.DaytonaOpContext>;
75
+ export {};
76
+ //# sourceMappingURL=OrganizationSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationSettings.d.ts","sources":["../src/OrganizationSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,wCAAwC,CAAC;AAExE,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IACpC,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5C,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,UAAU,QAAQ;IAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,mDAAmD;IACnD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,0BAA0B;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CACzC,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;6JAEhC,CAAC;AAmDF,eAAO,MAAM,4BAA4B,oHAmDtC,CAAC"}
@@ -0,0 +1,107 @@
1
+ import * as organizations from "@distilled.cloud/daytona/organizations";
2
+ import { deepEqual, isResolved } from "alchemy/Diff";
3
+ import * as Provider from "alchemy/Provider";
4
+ import { Resource } from "alchemy/Resource";
5
+ import * as Duration from "effect/Duration";
6
+ import * as Effect from "effect/Effect";
7
+ import { declarable } from "./internal/Declared.js";
8
+ import { currentOrganizationId, movesOrganization, organizationIdFor, } from "./internal/Organization.js";
9
+ /**
10
+ * Settings of the Daytona organization the credentials belong to: the
11
+ * default region, the queue timeout for creates waiting on capacity, and
12
+ * experimental flags. Only the settings you declare are changed.
13
+ *
14
+ * The organization always exists, so this resource captures the settings
15
+ * it finds on first deploy and puts them back on destroy.
16
+ *
17
+ * ### Configuring the Organization
18
+ * **Example:** Default region and a one-minute queue timeout
19
+ * ```typescript
20
+ * export const Settings = Daytona.OrganizationSettings("Settings", {
21
+ * defaultRegionId: "eu",
22
+ * defaultQueueTimeout: "1 minute",
23
+ * });
24
+ * ```
25
+ *
26
+ * @resource
27
+ * @product Organization
28
+ */
29
+ export const OrganizationSettings = declarable()(Resource("Daytona.OrganizationSettings"));
30
+ const seconds = (d) => d === null ? null : Math.round(Duration.toSeconds(d));
31
+ const toAttributes = (org, original) => ({
32
+ organizationId: org.id,
33
+ name: org.name,
34
+ defaultRegionId: org.defaultRegionId,
35
+ defaultQueueTimeout: org.defaultQueueTimeout,
36
+ experimentalConfig: org.experimentalConfig,
37
+ original,
38
+ });
39
+ const apply = Effect.fn(function* (org, want) {
40
+ if (want.defaultRegionId !== undefined && want.defaultRegionId !== org.defaultRegionId) {
41
+ yield* organizations.setOrganizationDefaultRegion({
42
+ organizationId: org.id,
43
+ defaultRegionId: want.defaultRegionId,
44
+ });
45
+ }
46
+ if (want.defaultQueueTimeout !== undefined &&
47
+ want.defaultQueueTimeout !== org.defaultQueueTimeout) {
48
+ yield* organizations.updateOrganizationDefaultQueueTimeout({
49
+ organizationId: org.id,
50
+ defaultQueueTimeout: want.defaultQueueTimeout,
51
+ });
52
+ }
53
+ if (want.experimentalConfig !== undefined &&
54
+ !deepEqual(want.experimentalConfig, org.experimentalConfig)) {
55
+ yield* organizations.updateExperimentalConfig({
56
+ organizationId: org.id,
57
+ body: want.experimentalConfig,
58
+ });
59
+ }
60
+ });
61
+ export const OrganizationSettingsProvider = () => Provider.effect(OrganizationSettings, Effect.succeed({
62
+ stables: ["organizationId", "original"],
63
+ nuke: { singleton: true },
64
+ list: () => Effect.succeed([]),
65
+ diff: Effect.fn(function* ({ news, output }) {
66
+ if (!isResolved(news) || output === undefined)
67
+ return undefined;
68
+ if (yield* movesOrganization(news.organization, output))
69
+ return { action: "replace" };
70
+ }),
71
+ read: Effect.fn(function* ({ output }) {
72
+ const org = yield* organizations.getOrganization({
73
+ organizationId: output?.organizationId ?? (yield* currentOrganizationId),
74
+ });
75
+ return toAttributes(org, output?.original ?? {
76
+ defaultRegionId: org.defaultRegionId,
77
+ defaultQueueTimeout: org.defaultQueueTimeout,
78
+ experimentalConfig: org.experimentalConfig,
79
+ });
80
+ }),
81
+ reconcile: Effect.fn(function* ({ news, output }) {
82
+ const organizationId = yield* organizationIdFor(news.organization);
83
+ // Observe
84
+ const org = yield* organizations.getOrganization({ organizationId });
85
+ const original = output?.original ?? {
86
+ defaultRegionId: org.defaultRegionId,
87
+ defaultQueueTimeout: org.defaultQueueTimeout,
88
+ experimentalConfig: org.experimentalConfig,
89
+ };
90
+ // Sync only what is declared, against observed settings.
91
+ yield* apply(org, {
92
+ defaultRegionId: news.defaultRegionId,
93
+ defaultQueueTimeout: news.defaultQueueTimeout === undefined ? undefined : seconds(news.defaultQueueTimeout),
94
+ experimentalConfig: news.experimentalConfig,
95
+ });
96
+ return toAttributes(yield* organizations.getOrganization({ organizationId }), original);
97
+ }),
98
+ delete: Effect.fn(function* ({ output }) {
99
+ const org = yield* organizations
100
+ .getOrganization({ organizationId: output.organizationId })
101
+ .pipe(Effect.catchTag("OrganizationNotFound", () => Effect.undefined));
102
+ if (org === undefined)
103
+ return;
104
+ yield* apply(org, output.original);
105
+ }),
106
+ }));
107
+ //# sourceMappingURL=OrganizationSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationSettings.js","sources":["../src/OrganizationSettings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import * as Provider from "alchemy/Provider";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Credentials from "./Credentials.ts";
4
+ declare const Providers_base: Provider.ProviderCollection<Providers, "Daytona">;
5
+ export declare class Providers extends Providers_base {
6
+ }
7
+ export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
8
+ /**
9
+ * Daytona providers and credentials: every Daytona resource, and the
10
+ * Daytona AuthProvider so `alchemy profile edit` can configure it.
11
+ */
12
+ export declare const providers: () => Layer.Layer<Credentials.Credentials | import("alchemy/Auth/Credentials").CredentialsStore | import("@alchemy.run/docker/Docker").Docker | import("effect/http/HttpClient").HttpClient | import("alchemy/Auth/Profile").ProfileStore | Providers, never, import("alchemy/AlchemyContext").AlchemyContext | import("alchemy/Auth/Registry").AuthProviders | import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/crypto/SecureRandom").SecureRandom | import("alchemy/Stack").Stack | import("alchemy/Stage").Stage>;
13
+ export {};
14
+ //# sourceMappingURL=Providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Providers.d.ts","sources":["../src/Providers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;;AAwBhD,qBAAa,SAAU,SAAQ,cAAmD;CAAG;AAErF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,SAAS,6lBAoDnB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { DockerLive } from "@alchemy.run/docker/Docker";
2
+ import { CredentialsStoreLive } from "alchemy/Auth/Credentials";
3
+ import { ProfileStoreLive } from "alchemy/Auth/Profile";
4
+ import * as Provider from "alchemy/Provider";
5
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
6
+ import * as Layer from "effect/Layer";
7
+ import { ApiKey, ApiKeyProvider } from "./ApiKey.js";
8
+ import { DaytonaAuth } from "./AuthProvider.js";
9
+ import * as Credentials from "./Credentials.js";
10
+ import { IdentityProvider, IdentityProviderProvider } from "./IdentityProvider.js";
11
+ import { Organization, OrganizationProvider } from "./Organization.js";
12
+ import { OrganizationInvitation, OrganizationInvitationProvider, } from "./OrganizationInvitation.js";
13
+ import { OrganizationMember, OrganizationMemberProvider } from "./OrganizationMember.js";
14
+ import { OrganizationOtelConfig, OrganizationOtelConfigProvider, } from "./OrganizationOtelConfig.js";
15
+ import { OrganizationRole, OrganizationRoleProvider } from "./OrganizationRole.js";
16
+ import { OrganizationSettings, OrganizationSettingsProvider } from "./OrganizationSettings.js";
17
+ import { Region, RegionProvider } from "./Region.js";
18
+ import { Registry, RegistryProvider } from "./Registry.js";
19
+ import { Runner, RunnerProvider } from "./Runner.js";
20
+ import { Sandbox, SandboxProvider } from "./Sandbox.js";
21
+ import { Secret, SecretProvider } from "./Secret.js";
22
+ import { Snapshot, SnapshotProvider } from "./Snapshot.js";
23
+ import { Volume, VolumeProvider } from "./Volume.js";
24
+ import { WarmPool, WarmPoolProvider } from "./WarmPool.js";
25
+ import { Webhooks, WebhooksProvider } from "./Webhooks.js";
26
+ export class Providers extends Provider.ProviderCollection()("Daytona") {
27
+ }
28
+ /**
29
+ * Daytona providers and credentials: every Daytona resource, and the
30
+ * Daytona AuthProvider so `alchemy profile edit` can configure it.
31
+ */
32
+ export const providers = () => Layer.effect(Providers, Provider.collection([
33
+ ApiKey,
34
+ IdentityProvider,
35
+ Organization,
36
+ OrganizationInvitation,
37
+ OrganizationMember,
38
+ OrganizationOtelConfig,
39
+ OrganizationRole,
40
+ OrganizationSettings,
41
+ Region,
42
+ Registry,
43
+ Runner,
44
+ Sandbox,
45
+ Secret,
46
+ Snapshot,
47
+ Volume,
48
+ WarmPool,
49
+ Webhooks,
50
+ ])).pipe(Layer.provide(Layer.mergeAll(ApiKeyProvider(), IdentityProviderProvider(), OrganizationProvider(), OrganizationInvitationProvider(), OrganizationMemberProvider(), OrganizationOtelConfigProvider(), OrganizationRoleProvider(), OrganizationSettingsProvider(), RegionProvider(), RegistryProvider(), RunnerProvider(), SandboxProvider(), SecretProvider(), SnapshotProvider(), VolumeProvider(), WarmPoolProvider(), WebhooksProvider())),
51
+ // Snapshots Daytona can't build are built with local Docker.
52
+ Layer.provideMerge(DockerLive), Layer.provideMerge(Credentials.fromAuthProvider()), Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(DaytonaAuth), Layer.provideMerge(ProfileStoreLive), Layer.provideMerge(CredentialsStoreLive), Layer.orDie);
53
+ //# sourceMappingURL=Providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Providers.js","sources":["../src/Providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import * as audit from "@distilled.cloud/daytona/audit";
2
+ import * as Binding from "alchemy/Binding";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { type OrganizationFixed, type ScopedModule } from "./internal/Scoped.ts";
6
+ /** The organization's audit log. */
7
+ export interface ReadAuditLogsClient extends ScopedModule<typeof audit, OrganizationFixed> {
8
+ }
9
+ /**
10
+ * Read the organization's audit log at runtime: who created, started,
11
+ * deleted or changed what, and with which API key.
12
+ *
13
+ * The host gets its own Daytona API key with `read:audit_logs`.
14
+ *
15
+ * ### Reading the Audit Log
16
+ * **Example:** The latest entries
17
+ * ```typescript
18
+ * const audit = yield* Daytona.ReadAuditLogs();
19
+ * const page = yield* audit.getOrganizationAuditLogs({ limit: 50 });
20
+ * ```
21
+ *
22
+ * @binding
23
+ * @product Organization
24
+ */
25
+ export interface ReadAuditLogs extends Binding.Service<ReadAuditLogs, "Daytona.ReadAuditLogs", () => Effect.Effect<ReadAuditLogsClient>> {
26
+ }
27
+ export declare const ReadAuditLogs: ReadAuditLogs;
28
+ /** {@link ReadAuditLogs} over Daytona's HTTP API; works on any host. */
29
+ export declare const ReadAuditLogsHttp: Layer.Layer<ReadAuditLogs, never, never>;
30
+ //# sourceMappingURL=ReadAuditLogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadAuditLogs.d.ts","sources":["../src/ReadAuditLogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG9F,oCAAoC;AACpC,MAAM,WAAW,mBAAoB,SAAQ,YAAY,CAAC,OAAO,KAAK,EAAE,iBAAiB,CAAC;CAAG;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,OAAO,CACpD,aAAa,EACb,uBAAuB,EACvB,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CACzC;CAAG;AAEJ,eAAO,MAAM,aAAa,eAA0D,CAAC;AAErF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,0CAa7B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as audit from "@distilled.cloud/daytona/audit";
2
+ import * as Binding from "alchemy/Binding";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { makeAccess } from "./DaytonaBindings.js";
6
+ import { scopeModule } from "./internal/Scoped.js";
7
+ import { lazyScoped } from "./ReadOrganization.js";
8
+ export const ReadAuditLogs = Binding.Service("Daytona.ReadAuditLogs");
9
+ /** {@link ReadAuditLogs} over Daytona's HTTP API; works on any host. */
10
+ export const ReadAuditLogsHttp = Layer.effect(ReadAuditLogs, Effect.gen(function* () {
11
+ const access = yield* makeAccess;
12
+ return Effect.fn(function* () {
13
+ const { authorize, organizationId } = yield* access("AuditLogs", ["read:audit_logs"]);
14
+ return lazyScoped(organizationId, (id) => scopeModule(audit, { organizationId: id }, (effect) => authorize(effect)));
15
+ });
16
+ }));
17
+ //# sourceMappingURL=ReadAuditLogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadAuditLogs.js","sources":["../src/ReadAuditLogs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAA6C,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA2BnD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAgB,uBAAuB,CAAC,CAAC;AAErF,wEAAwE;AACxE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAC3C,aAAa,EACb,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACjC,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACxB,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CACvC,WAAW,CAAkC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CACrF,SAAS,CAAC,MAAM,CAAC,CAClB,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ import * as organizations from "@distilled.cloud/daytona/organizations";
2
+ import * as regions from "@distilled.cloud/daytona/regions";
3
+ import * as webhooks from "@distilled.cloud/daytona/webhooks";
4
+ import * as Binding from "alchemy/Binding";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import { type ScopedModule } from "./internal/Scoped.ts";
8
+ declare const ORGANIZATION_READS: readonly ["getGpuCapacity", "listAvailableSandboxClasses", "getOrganizationUsageOverview"];
9
+ declare const WEBHOOK_READS: readonly ["getWebhookControllerAppPortalAccess", "getWebhookControllerInitializationStatus"];
10
+ /** Read-only views of the organization: quotas, usage, GPU capacity, regions and the webhook portal. */
11
+ export interface ReadOrganizationClient extends ScopedModule<Pick<typeof organizations, (typeof ORGANIZATION_READS)[number]>>, ScopedModule<typeof regions>, ScopedModule<Pick<typeof webhooks, (typeof WEBHOOK_READS)[number]>> {
12
+ }
13
+ /**
14
+ * Read the organization's limits and usage at runtime: current usage
15
+ * against quotas, which sandbox classes and GPUs are available, and the
16
+ * shared regions. Use it to pick a region or refuse work before hitting a
17
+ * quota.
18
+ *
19
+ * The host gets its own Daytona API key with `read:limits`.
20
+ *
21
+ * ### Checking Capacity
22
+ * **Example:** Refuse a GPU job when no GPUs are free
23
+ * ```typescript
24
+ * const org = yield* Daytona.ReadOrganization();
25
+ * const capacity = yield* org.getGpuCapacity();
26
+ * ```
27
+ *
28
+ * @binding
29
+ * @product Organization
30
+ */
31
+ export interface ReadOrganization extends Binding.Service<ReadOrganization, "Daytona.ReadOrganization", () => Effect.Effect<ReadOrganizationClient>> {
32
+ }
33
+ export declare const ReadOrganization: ReadOrganization;
34
+ /** {@link ReadOrganization} over Daytona's HTTP API; works on any host. */
35
+ export declare const ReadOrganizationHttp: Layer.Layer<ReadOrganization, never, never>;
36
+ /** Build a scoped client whose organization id resolves at runtime. */
37
+ export declare const lazyScoped: <C extends object>(organizationId: Effect.Effect<string, never, any>, make: (organizationId: string) => C) => C;
38
+ export {};
39
+ //# sourceMappingURL=ReadOrganization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadOrganization.d.ts","sources":["../src/ReadOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,OAAO,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E,QAAA,MAAM,kBAAkB,YACtB,gBAAgB,EAChB,6BAA6B,EAC7B,8BAA8B,CACtB,CAAC;AAEX,QAAA,MAAM,aAAa,YACjB,qCAAqC,EACrC,0CAA0C,CAClC,CAAC;AAEX,wGAAwG;AACxG,MAAM,WAAW,sBACf,SACE,YAAY,CAAC,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC7E,YAAY,CAAC,OAAO,OAAO,CAAC,EAC5B,YAAY,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CAAG;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,OAAO,CACvD,gBAAgB,EAChB,0BAA0B,EAC1B,MAAM,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAC5C;CAAG;AAEJ,eAAO,MAAM,gBAAgB,kBAAgE,CAAC;AAE9F,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,6CAchC,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,kBACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,QAC3C,CAAC,cAAc,EAAE,MAAM,KAAK,CAAC,KAClC,CAQC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import * as organizations from "@distilled.cloud/daytona/organizations";
2
+ import * as regions from "@distilled.cloud/daytona/regions";
3
+ import * as webhooks from "@distilled.cloud/daytona/webhooks";
4
+ import * as Binding from "alchemy/Binding";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import { makeAccess } from "./DaytonaBindings.js";
8
+ import { pick, scopeModule } from "./internal/Scoped.js";
9
+ const ORGANIZATION_READS = [
10
+ "getGpuCapacity",
11
+ "listAvailableSandboxClasses",
12
+ "getOrganizationUsageOverview",
13
+ ];
14
+ const WEBHOOK_READS = [
15
+ "getWebhookControllerAppPortalAccess",
16
+ "getWebhookControllerInitializationStatus",
17
+ ];
18
+ export const ReadOrganization = Binding.Service("Daytona.ReadOrganization");
19
+ /** {@link ReadOrganization} over Daytona's HTTP API; works on any host. */
20
+ export const ReadOrganizationHttp = Layer.effect(ReadOrganization, Effect.gen(function* () {
21
+ const access = yield* makeAccess;
22
+ return Effect.fn(function* () {
23
+ const { authorize, organizationId } = yield* access("Organization", ["read:limits"]);
24
+ const run = (effect) => authorize(effect);
25
+ return lazyScoped(organizationId, (id) => ({
26
+ ...scopeModule(pick(organizations, ORGANIZATION_READS), { organizationId: id }, run),
27
+ ...scopeModule(regions, {}, run),
28
+ ...scopeModule(pick(webhooks, WEBHOOK_READS), { organizationId: id }, run),
29
+ }));
30
+ });
31
+ }));
32
+ /** Build a scoped client whose organization id resolves at runtime. */
33
+ export const lazyScoped = (organizationId, make) => new Proxy({}, {
34
+ get: (_t, key) => (...args) =>
35
+ // `key` is a property of C (the Proxy only sees C's members), but a
36
+ // Proxy trap types it as string, so the lookup is untyped here.
37
+ Effect.flatMap(organizationId, (id) => make(id)[key](...args)),
38
+ });
39
+ //# sourceMappingURL=ReadOrganization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadOrganization.js","sources":["../src/ReadOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,OAAO,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,QAAQ,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAE5E,MAAM,kBAAkB,GAAG;IACzB,gBAAgB;IAChB,6BAA6B;IAC7B,8BAA8B;CACtB,CAAC;AAEX,MAAM,aAAa,GAAG;IACpB,qCAAqC;IACrC,0CAA0C;CAClC,CAAC;AAiCX,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAmB,0BAA0B,CAAC,CAAC;AAE9F,2EAA2E;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACjC,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACxB,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,CAAU,MAA8B,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;YACpF,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC;YAChC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SAC3E,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,cAAiD,EACjD,IAAmC,EAChC,EAAE,CACL,IAAI,KAAK,CAAC,EAAO,EAAE;IACjB,GAAG,EACD,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE,CACpB,CAAC,GAAG,IAAe,EAAE,EAAE;IACrB,oEAAoE;IACpE,gEAAgE;IAChE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAE,IAAI,CAAC,EAAE,CAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC5E,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import * as usage from "@distilled.cloud/daytona/usage";
2
+ import * as Binding from "alchemy/Binding";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { type OrganizationFixed, type ScopedModule } from "./internal/Scoped.ts";
6
+ /** Usage from Daytona's analytics API: totals, charts and per-sandbox usage. */
7
+ export interface ReadUsageClient extends ScopedModule<typeof usage, OrganizationFixed> {
8
+ }
9
+ /**
10
+ * Read the organization's compute usage at runtime: aggregated totals, a
11
+ * chart over time, and usage per sandbox. Use it to bill your own users
12
+ * for the sandboxes you run for them.
13
+ *
14
+ * The host gets its own Daytona API key with `read:billing`.
15
+ *
16
+ * ### Usage per Sandbox
17
+ * **Example:** Usage over the last day
18
+ * ```typescript
19
+ * const usage = yield* Daytona.ReadUsage();
20
+ * const rows = yield* usage.listOrganizationUsageSandbox({ from, to });
21
+ * ```
22
+ *
23
+ * @binding
24
+ * @product Organization
25
+ */
26
+ export interface ReadUsage extends Binding.Service<ReadUsage, "Daytona.ReadUsage", () => Effect.Effect<ReadUsageClient>> {
27
+ }
28
+ export declare const ReadUsage: ReadUsage;
29
+ /** {@link ReadUsage} over Daytona's analytics API; works on any host. */
30
+ export declare const ReadUsageHttp: Layer.Layer<ReadUsage, never, never>;
31
+ //# sourceMappingURL=ReadUsage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadUsage.d.ts","sources":["../src/ReadUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG9F,gFAAgF;AAChF,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,KAAK,EAAE,iBAAiB,CAAC;CAAG;AAEzF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,SAAU,SAAQ,OAAO,CAAC,OAAO,CAChD,SAAS,EACT,mBAAmB,EACnB,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CACrC;CAAG;AAEJ,eAAO,MAAM,SAAS,WAAkD,CAAC;AAEzE,yEAAyE;AACzE,eAAO,MAAM,aAAa,sCAazB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import * as usage from "@distilled.cloud/daytona/usage";
2
+ import * as Binding from "alchemy/Binding";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { makeAccess } from "./DaytonaBindings.js";
6
+ import { scopeModule } from "./internal/Scoped.js";
7
+ import { lazyScoped } from "./ReadOrganization.js";
8
+ export const ReadUsage = Binding.Service("Daytona.ReadUsage");
9
+ /** {@link ReadUsage} over Daytona's analytics API; works on any host. */
10
+ export const ReadUsageHttp = Layer.effect(ReadUsage, Effect.gen(function* () {
11
+ const access = yield* makeAccess;
12
+ return Effect.fn(function* () {
13
+ const { authorize, organizationId } = yield* access("Usage", ["read:billing"]);
14
+ return lazyScoped(organizationId, (id) => scopeModule(usage, { organizationId: id }, (effect) => authorize(effect)));
15
+ });
16
+ }));
17
+ //# sourceMappingURL=ReadUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadUsage.js","sources":["../src/ReadUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAA6C,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA4BnD,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAY,mBAAmB,CAAC,CAAC;AAEzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CACvC,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACjC,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACxB,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/E,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CACvC,WAAW,CAAkC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CACrF,SAAS,CAAC,MAAM,CAAC,CAClB,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}