@alchemy.run/turso 0.0.0 → 2.0.0-beta.84

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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +68 -4
  3. package/lib/ApiToken.d.ts +73 -0
  4. package/lib/ApiToken.d.ts.map +1 -0
  5. package/lib/ApiToken.js +120 -0
  6. package/lib/ApiToken.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +36 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +85 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/Connect.d.ts +79 -0
  12. package/lib/Connect.d.ts.map +1 -0
  13. package/lib/Connect.js +22 -0
  14. package/lib/Connect.js.map +1 -0
  15. package/lib/Contributions.d.ts +7 -0
  16. package/lib/Contributions.d.ts.map +1 -0
  17. package/lib/Contributions.js +6 -0
  18. package/lib/Contributions.js.map +1 -0
  19. package/lib/Credentials.d.ts +39 -0
  20. package/lib/Credentials.d.ts.map +1 -0
  21. package/lib/Credentials.js +80 -0
  22. package/lib/Credentials.js.map +1 -0
  23. package/lib/Database.d.ts +217 -0
  24. package/lib/Database.d.ts.map +1 -0
  25. package/lib/Database.js +271 -0
  26. package/lib/Database.js.map +1 -0
  27. package/lib/DatabaseToken.d.ts +95 -0
  28. package/lib/DatabaseToken.d.ts.map +1 -0
  29. package/lib/DatabaseToken.js +128 -0
  30. package/lib/DatabaseToken.js.map +1 -0
  31. package/lib/Group.d.ts +93 -0
  32. package/lib/Group.d.ts.map +1 -0
  33. package/lib/Group.js +162 -0
  34. package/lib/Group.js.map +1 -0
  35. package/lib/GroupToken.d.ts +48 -0
  36. package/lib/GroupToken.d.ts.map +1 -0
  37. package/lib/GroupToken.js +83 -0
  38. package/lib/GroupToken.js.map +1 -0
  39. package/lib/Hrana.d.ts +42 -0
  40. package/lib/Hrana.d.ts.map +1 -0
  41. package/lib/Hrana.js +105 -0
  42. package/lib/Hrana.js.map +1 -0
  43. package/lib/ManageDatabases.d.ts +73 -0
  44. package/lib/ManageDatabases.d.ts.map +1 -0
  45. package/lib/ManageDatabases.js +81 -0
  46. package/lib/ManageDatabases.js.map +1 -0
  47. package/lib/OrganizationInvite.d.ts +46 -0
  48. package/lib/OrganizationInvite.d.ts.map +1 -0
  49. package/lib/OrganizationInvite.js +72 -0
  50. package/lib/OrganizationInvite.js.map +1 -0
  51. package/lib/OrganizationMember.d.ts +47 -0
  52. package/lib/OrganizationMember.d.ts.map +1 -0
  53. package/lib/OrganizationMember.js +81 -0
  54. package/lib/OrganizationMember.js.map +1 -0
  55. package/lib/OrganizationSettings.d.ts +52 -0
  56. package/lib/OrganizationSettings.d.ts.map +1 -0
  57. package/lib/OrganizationSettings.js +93 -0
  58. package/lib/OrganizationSettings.js.map +1 -0
  59. package/lib/Providers.d.ts +24 -0
  60. package/lib/Providers.d.ts.map +1 -0
  61. package/lib/Providers.js +42 -0
  62. package/lib/Providers.js.map +1 -0
  63. package/lib/index.d.ts +14 -0
  64. package/lib/index.d.ts.map +1 -0
  65. package/lib/index.js +14 -0
  66. package/lib/index.js.map +1 -0
  67. package/package.json +54 -3
  68. package/src/ApiToken.ts +197 -0
  69. package/src/AuthProvider.ts +113 -0
  70. package/src/Connect.ts +103 -0
  71. package/src/Contributions.ts +9 -0
  72. package/src/Credentials.ts +139 -0
  73. package/src/Database.ts +504 -0
  74. package/src/DatabaseToken.ts +203 -0
  75. package/src/Group.ts +256 -0
  76. package/src/GroupToken.ts +119 -0
  77. package/src/Hrana.ts +182 -0
  78. package/src/ManageDatabases.ts +195 -0
  79. package/src/OrganizationInvite.ts +118 -0
  80. package/src/OrganizationMember.ts +122 -0
  81. package/src/OrganizationSettings.ts +145 -0
  82. package/src/Providers.ts +67 -0
  83. package/src/index.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageDatabases.js","sourceRoot":"","sources":["../src/ManageDatabases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import type { Providers } from "./Providers.ts";
5
+ /** Role granted to an invited or added organization member. */
6
+ export type MemberRole = "admin" | "member" | "viewer";
7
+ export interface OrganizationInviteProps {
8
+ /** Email address to invite. Changing it replaces the invite. */
9
+ email: string;
10
+ /**
11
+ * Role the invitee receives on accepting.
12
+ * @default "member"
13
+ */
14
+ role?: MemberRole;
15
+ }
16
+ export interface OrganizationInviteAttributes {
17
+ /** The invited email address. */
18
+ email: string;
19
+ /** The organization slug the invite is for. */
20
+ organization: string;
21
+ /** Role the invitee receives on accepting. */
22
+ role: string;
23
+ }
24
+ export type OrganizationInvite = Resource<"Turso.OrganizationInvite", OrganizationInviteProps, OrganizationInviteAttributes, never, Providers>;
25
+ /**
26
+ * An invitation for someone to join your Turso organization by email.
27
+ * Changing `role` re-sends the invite with the new role; destroying the
28
+ * resource withdraws a pending invite. Requires a team organization on a
29
+ * paid plan — the Starter plan rejects invites with `BadRequest`.
30
+ * @see https://docs.turso.tech/api-reference/organizations/invites/create
31
+ *
32
+ * ### Inviting Members
33
+ * **Example:** Invite a teammate as an admin
34
+ * ```typescript
35
+ * yield* Turso.OrganizationInvite("Alice", {
36
+ * email: "alice@example.com",
37
+ * role: "admin",
38
+ * });
39
+ * ```
40
+ *
41
+ * @resource
42
+ * @product Organization
43
+ */
44
+ export declare const OrganizationInvite: import("alchemy/Resource").ResourceClass<OrganizationInvite>;
45
+ export declare const OrganizationInviteProvider: () => import("effect/Layer").Layer<Provider.Provider<OrganizationInvite>, never, import("./Credentials.ts").Organization | turso.TursoOpContext>;
46
+ //# sourceMappingURL=OrganizationInvite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationInvite.d.ts","sourceRoot":"","sources":["../src/OrganizationInvite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AAEtD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,8DAA2D,CAAC;AAE3F,eAAO,MAAM,0BAA0B,kJA0DpC,CAAC"}
@@ -0,0 +1,72 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import { isResolved } from "alchemy/Diff";
3
+ import * as Provider from "alchemy/Provider";
4
+ import { Resource } from "alchemy/Resource";
5
+ import * as Effect from "effect/Effect";
6
+ import { organization } from "./Credentials.js";
7
+ /**
8
+ * An invitation for someone to join your Turso organization by email.
9
+ * Changing `role` re-sends the invite with the new role; destroying the
10
+ * resource withdraws a pending invite. Requires a team organization on a
11
+ * paid plan — the Starter plan rejects invites with `BadRequest`.
12
+ * @see https://docs.turso.tech/api-reference/organizations/invites/create
13
+ *
14
+ * ### Inviting Members
15
+ * **Example:** Invite a teammate as an admin
16
+ * ```typescript
17
+ * yield* Turso.OrganizationInvite("Alice", {
18
+ * email: "alice@example.com",
19
+ * role: "admin",
20
+ * });
21
+ * ```
22
+ *
23
+ * @resource
24
+ * @product Organization
25
+ */
26
+ export const OrganizationInvite = Resource("Turso.OrganizationInvite");
27
+ export const OrganizationInviteProvider = () => Provider.effect(OrganizationInvite, Effect.gen(function* () {
28
+ const observe = (org, email) => turso
29
+ .listOrganizationInvitesV2({ organizationSlug: org })
30
+ .pipe(Effect.map(({ invites }) => (invites ?? []).find((i) => i.email?.toLowerCase() === email.toLowerCase())));
31
+ const withdraw = (org, email) => turso.deleteOrganizationInviteByEmailV2({ organizationSlug: org, email }).pipe(Effect.asVoid, Effect.catchTag("NotFound", () => Effect.void));
32
+ return {
33
+ stables: ["email", "organization"],
34
+ diff: Effect.fn(function* ({ olds, news }) {
35
+ if (!isResolved(news))
36
+ return undefined;
37
+ if (news.email.toLowerCase() !== olds?.email.toLowerCase()) {
38
+ return { action: "replace" };
39
+ }
40
+ }),
41
+ read: Effect.fn(function* ({ olds, output }) {
42
+ const org = output?.organization ?? (yield* organization);
43
+ const invite = yield* observe(org, output?.email ?? olds.email);
44
+ if (!invite?.email)
45
+ return undefined;
46
+ return { email: invite.email, organization: org, role: invite.role ?? "member" };
47
+ }),
48
+ reconcile: Effect.fn(function* ({ news, output }) {
49
+ const org = output?.organization ?? (yield* organization);
50
+ const role = news.role ?? "member";
51
+ // Observe
52
+ const invite = yield* observe(org, news.email);
53
+ // Ensure / sync — invites have no update API, so a role change
54
+ // withdraws and re-sends.
55
+ if (invite?.role === role) {
56
+ return { email: invite.email ?? news.email, organization: org, role };
57
+ }
58
+ if (invite)
59
+ yield* withdraw(org, news.email);
60
+ const { invited } = yield* turso.inviteOrganizationMemberV2({
61
+ organizationSlug: org,
62
+ email: news.email,
63
+ role,
64
+ });
65
+ return { email: invited?.email ?? news.email, organization: org, role };
66
+ }),
67
+ delete: Effect.fn(function* ({ output }) {
68
+ yield* withdraw(output.organization, output.email);
69
+ }),
70
+ };
71
+ }));
72
+ //# sourceMappingURL=OrganizationInvite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationInvite.js","sourceRoot":"","sources":["../src/OrganizationInvite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import type { MemberRole } from "./OrganizationInvite.ts";
5
+ import type { Providers } from "./Providers.ts";
6
+ export interface OrganizationMemberProps {
7
+ /** Username of an existing Turso user. Changing it replaces the member. */
8
+ username: string;
9
+ /**
10
+ * Role of the member in the organization.
11
+ * @default "member"
12
+ */
13
+ role?: MemberRole;
14
+ }
15
+ export interface OrganizationMemberAttributes {
16
+ /** Username of the member. */
17
+ username: string;
18
+ /** The organization slug. */
19
+ organization: string;
20
+ /** Role of the member. */
21
+ role: string;
22
+ /** Email of the member. */
23
+ email: string | undefined;
24
+ }
25
+ export type OrganizationMember = Resource<"Turso.OrganizationMember", OrganizationMemberProps, OrganizationMemberAttributes, never, Providers>;
26
+ /**
27
+ * Adds an existing Turso user to your organization with a role, and keeps
28
+ * that role in sync. Destroying the resource removes the member. Use
29
+ * {@link OrganizationInvite} for people who don't have a Turso account
30
+ * yet. Requires a team organization on a paid plan.
31
+ * @see https://docs.turso.tech/api-reference/organizations/members/add
32
+ *
33
+ * ### Managing Members
34
+ * **Example:** Add a user as a viewer
35
+ * ```typescript
36
+ * yield* Turso.OrganizationMember("Bob", {
37
+ * username: "bob",
38
+ * role: "viewer",
39
+ * });
40
+ * ```
41
+ *
42
+ * @resource
43
+ * @product Organization
44
+ */
45
+ export declare const OrganizationMember: import("alchemy/Resource").ResourceClass<OrganizationMember>;
46
+ export declare const OrganizationMemberProvider: () => import("effect/Layer").Layer<Provider.Provider<OrganizationMember>, never, import("./Credentials.ts").Organization | turso.TursoOpContext>;
47
+ //# sourceMappingURL=OrganizationMember.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationMember.d.ts","sourceRoot":"","sources":["../src/OrganizationMember.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AAEtD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB,8DAA2D,CAAC;AAE3F,eAAO,MAAM,0BAA0B,kJA8DpC,CAAC"}
@@ -0,0 +1,81 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import { isResolved } from "alchemy/Diff";
3
+ import * as Provider from "alchemy/Provider";
4
+ import { Resource } from "alchemy/Resource";
5
+ import * as Effect from "effect/Effect";
6
+ import { organization } from "./Credentials.js";
7
+ /**
8
+ * Adds an existing Turso user to your organization with a role, and keeps
9
+ * that role in sync. Destroying the resource removes the member. Use
10
+ * {@link OrganizationInvite} for people who don't have a Turso account
11
+ * yet. Requires a team organization on a paid plan.
12
+ * @see https://docs.turso.tech/api-reference/organizations/members/add
13
+ *
14
+ * ### Managing Members
15
+ * **Example:** Add a user as a viewer
16
+ * ```typescript
17
+ * yield* Turso.OrganizationMember("Bob", {
18
+ * username: "bob",
19
+ * role: "viewer",
20
+ * });
21
+ * ```
22
+ *
23
+ * @resource
24
+ * @product Organization
25
+ */
26
+ export const OrganizationMember = Resource("Turso.OrganizationMember");
27
+ export const OrganizationMemberProvider = () => Provider.effect(OrganizationMember, Effect.gen(function* () {
28
+ const observe = (org, username) => turso.getOrganizationMember({ organizationSlug: org, username }).pipe(Effect.map(({ member }) => member), Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
29
+ return {
30
+ stables: ["username", "organization"],
31
+ diff: Effect.fn(function* ({ olds, news }) {
32
+ if (!isResolved(news))
33
+ return undefined;
34
+ if (news.username !== olds?.username)
35
+ return { action: "replace" };
36
+ }),
37
+ read: Effect.fn(function* ({ olds, output }) {
38
+ const org = output?.organization ?? (yield* organization);
39
+ const member = yield* observe(org, output?.username ?? olds.username);
40
+ if (!member?.username)
41
+ return undefined;
42
+ return {
43
+ username: member.username,
44
+ organization: org,
45
+ role: member.role ?? "member",
46
+ email: member.email,
47
+ };
48
+ }),
49
+ reconcile: Effect.fn(function* ({ news, output }) {
50
+ const org = output?.organization ?? (yield* organization);
51
+ const role = news.role ?? "member";
52
+ // Observe
53
+ let member = yield* observe(org, news.username);
54
+ // Ensure
55
+ if (!member) {
56
+ yield* turso
57
+ .addOrganizationMember({ organizationSlug: org, username: news.username, role })
58
+ .pipe(Effect.catchTag("Conflict", () => Effect.void));
59
+ member = yield* observe(org, news.username);
60
+ }
61
+ // Sync role
62
+ if (member?.role !== role) {
63
+ yield* turso.updateMemberRole({
64
+ organizationSlug: org,
65
+ username: news.username,
66
+ role,
67
+ });
68
+ }
69
+ return { username: news.username, organization: org, role, email: member?.email };
70
+ }),
71
+ delete: Effect.fn(function* ({ output }) {
72
+ yield* turso
73
+ .removeOrganizationMember({
74
+ organizationSlug: output.organization,
75
+ username: output.username,
76
+ })
77
+ .pipe(Effect.catchTag("NotFound", () => Effect.void));
78
+ }),
79
+ };
80
+ }));
81
+ //# sourceMappingURL=OrganizationMember.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationMember.js","sourceRoot":"","sources":["../src/OrganizationMember.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import type { Providers } from "./Providers.ts";
5
+ export interface OrganizationSettingsProps {
6
+ /** Allow usage beyond the plan's quota to be billed as overages. */
7
+ overages?: boolean;
8
+ /**
9
+ * Require every member to enable multi-factor authentication. The
10
+ * deploying user must have MFA enabled first.
11
+ */
12
+ requireMfa?: boolean;
13
+ /**
14
+ * Keep deleted databases and groups recoverable. Requires an admin or
15
+ * owner.
16
+ */
17
+ restoreEnabled?: boolean;
18
+ }
19
+ interface Settings {
20
+ overages: boolean;
21
+ requireMfa: boolean;
22
+ restoreEnabled: boolean;
23
+ }
24
+ export interface OrganizationSettingsAttributes extends Settings {
25
+ /** The organization slug. */
26
+ organization: string;
27
+ /** Settings observed before Alchemy first changed them; restored on destroy. */
28
+ original: Settings;
29
+ }
30
+ export type OrganizationSettings = Resource<"Turso.OrganizationSettings", OrganizationSettingsProps, OrganizationSettingsAttributes, never, Providers>;
31
+ /**
32
+ * Settings of the Turso organization your credentials act on. Only the
33
+ * settings you set are managed; destroying the resource restores the values
34
+ * observed before Alchemy first changed them.
35
+ * @see https://docs.turso.tech/api-reference/organizations/update
36
+ *
37
+ * ### Configuring the Organization
38
+ * **Example:** Enable overages and require MFA
39
+ * ```typescript
40
+ * yield* Turso.OrganizationSettings("Org", {
41
+ * overages: true,
42
+ * requireMfa: true,
43
+ * });
44
+ * ```
45
+ *
46
+ * @resource
47
+ * @product Organization
48
+ */
49
+ export declare const OrganizationSettings: import("alchemy/Resource").ResourceClass<OrganizationSettings>;
50
+ export declare const OrganizationSettingsProvider: () => import("effect/Layer").Layer<Provider.Provider<OrganizationSettings>, never, import("./Credentials.ts").Organization | turso.TursoOpContext>;
51
+ export {};
52
+ //# sourceMappingURL=OrganizationSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationSettings.d.ts","sourceRoot":"","sources":["../src/OrganizationSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,8BAA+B,SAAQ,QAAQ;IAC9D,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CACzC,4BAA4B,EAC5B,yBAAyB,EACzB,8BAA8B,EAC9B,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oBAAoB,gEAA+D,CAAC;AAQjG,eAAO,MAAM,4BAA4B,oJA0EtC,CAAC"}
@@ -0,0 +1,93 @@
1
+ import * as turso from "@distilled.cloud/turso/turso";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Schedule from "effect/Schedule";
6
+ import { organization } from "./Credentials.js";
7
+ /**
8
+ * Settings of the Turso organization your credentials act on. Only the
9
+ * settings you set are managed; destroying the resource restores the values
10
+ * observed before Alchemy first changed them.
11
+ * @see https://docs.turso.tech/api-reference/organizations/update
12
+ *
13
+ * ### Configuring the Organization
14
+ * **Example:** Enable overages and require MFA
15
+ * ```typescript
16
+ * yield* Turso.OrganizationSettings("Org", {
17
+ * overages: true,
18
+ * requireMfa: true,
19
+ * });
20
+ * ```
21
+ *
22
+ * @resource
23
+ * @product Organization
24
+ */
25
+ export const OrganizationSettings = Resource("Turso.OrganizationSettings");
26
+ const toSettings = (org) => ({
27
+ overages: org?.overages ?? false,
28
+ requireMfa: org?.require_mfa ?? false,
29
+ restoreEnabled: org?.restore_enabled ?? false,
30
+ });
31
+ export const OrganizationSettingsProvider = () => Provider.effect(OrganizationSettings, Effect.gen(function* () {
32
+ const observe = (slug) => turso
33
+ .getOrganization({ organizationSlug: slug })
34
+ .pipe(Effect.map(({ organization }) => toSettings(organization)));
35
+ // `restore_enabled` must be updated on its own (per the API).
36
+ const apply = (slug, observed, desired) => Effect.gen(function* () {
37
+ const patch = {};
38
+ if (desired.overages !== undefined && desired.overages !== observed.overages) {
39
+ patch.overages = desired.overages;
40
+ }
41
+ if (desired.requireMfa !== undefined && desired.requireMfa !== observed.requireMfa) {
42
+ patch.require_mfa = desired.requireMfa;
43
+ }
44
+ if (Object.keys(patch).length > 0) {
45
+ yield* turso.updateOrganization({ organizationSlug: slug, ...patch });
46
+ }
47
+ if (desired.restoreEnabled !== undefined &&
48
+ desired.restoreEnabled !== observed.restoreEnabled) {
49
+ yield* turso.updateOrganization({
50
+ organizationSlug: slug,
51
+ restore_enabled: desired.restoreEnabled,
52
+ });
53
+ }
54
+ });
55
+ return {
56
+ stables: ["organization", "original"],
57
+ read: Effect.fn(function* ({ output }) {
58
+ if (!output)
59
+ return undefined;
60
+ return { ...output, ...(yield* observe(output.organization)) };
61
+ }),
62
+ reconcile: Effect.fn(function* ({ news, output }) {
63
+ const slug = output?.organization ?? (yield* organization);
64
+ const observed = yield* observe(slug);
65
+ yield* apply(slug, observed, news);
66
+ // Organization reads can briefly lag a PATCH; wait until the
67
+ // settings we set are visible.
68
+ const settled = yield* observe(slug).pipe(Effect.repeat({
69
+ schedule: Schedule.spaced("1 second"),
70
+ until: (current) => (news.overages === undefined || current.overages === news.overages) &&
71
+ (news.requireMfa === undefined || current.requireMfa === news.requireMfa) &&
72
+ (news.restoreEnabled === undefined ||
73
+ current.restoreEnabled === news.restoreEnabled),
74
+ times: 10,
75
+ }));
76
+ return {
77
+ organization: slug,
78
+ original: output?.original ?? observed,
79
+ ...settled,
80
+ };
81
+ }),
82
+ delete: Effect.fn(function* ({ olds, output }) {
83
+ const observed = yield* observe(output.organization);
84
+ // Restore only the settings this resource managed.
85
+ yield* apply(output.organization, observed, {
86
+ overages: olds.overages !== undefined ? output.original.overages : undefined,
87
+ requireMfa: olds.requireMfa !== undefined ? output.original.requireMfa : undefined,
88
+ restoreEnabled: olds.restoreEnabled !== undefined ? output.original.restoreEnabled : undefined,
89
+ });
90
+ }),
91
+ };
92
+ }));
93
+ //# sourceMappingURL=OrganizationSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationSettings.js","sourceRoot":"","sources":["../src/OrganizationSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuChD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAuB,4BAA4B,CAAC,CAAC;AAEjG,MAAM,UAAU,GAAG,CAAC,GAAmC,EAAY,EAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK;IAChC,UAAU,EAAE,GAAG,EAAE,WAAW,IAAI,KAAK;IACrC,cAAc,EAAE,GAAG,EAAE,eAAe,IAAI,KAAK;CAC9C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,EAAE,CAC/C,QAAQ,CAAC,MAAM,CACb,oBAAoB,EACpB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,KAAK;SACF,eAAe,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;SAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEtE,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAE,OAA0B,EAAE,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAkD,EAAE,CAAC;QAChE,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7E,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;YACnF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACzC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IACE,OAAO,CAAC,cAAc,KAAK,SAAS;YACpC,OAAO,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,EAClD,CAAC;YACD,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAC9B,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,OAAO,CAAC,cAAc;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,OAAO,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;QACrC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC;YAC9B,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC,CAAC;QACF,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9C,MAAM,IAAI,GAAG,MAAM,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACnC,6DAA6D;YAC7D,+BAA+B;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CACvC,MAAM,CAAC,MAAM,CAAC;gBACZ,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;gBACrC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;oBACnE,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;oBACzE,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS;wBAChC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC;gBACnD,KAAK,EAAE,EAAE;aACV,CAAC,CACH,CAAC;YACF,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,QAAQ;gBACtC,GAAG,OAAO;aACX,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrD,mDAAmD;YACnD,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE;gBAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBAC5E,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBAClF,cAAc,EACZ,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC,CAAC;QACL,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,24 @@
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, "Turso">;
5
+ /**
6
+ * Service tag bundling all Turso providers + auth + credentials. Use
7
+ * `Turso.providers()` to materialize the full layer.
8
+ */
9
+ export declare class Providers extends Providers_base {
10
+ }
11
+ export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
12
+ /**
13
+ * Build the complete Turso providers Layer: every Turso resource, the
14
+ * Turso AuthProvider registration (so `alchemy profile edit` can configure
15
+ * it), and credential resolution.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * Alchemy.Stack("App", { providers: Turso.providers() }, ...)
20
+ * ```
21
+ */
22
+ export declare const providers: () => Layer.Layer<Credentials.Credentials | import("alchemy/Auth/Credentials").CredentialsStore | import("effect/http/HttpClient").HttpClient | Credentials.Organization | import("alchemy/Auth/Profile").ProfileStore | Providers, never, import("alchemy/Auth/AuthProvider").AuthProviders | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("alchemy/Stack").Stack | import("alchemy/Stage").Stage>;
23
+ export {};
24
+ //# sourceMappingURL=Providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;;AAShD;;;GAGG;AACH,qBAAa,SAAU,SAAQ,cAAiD;CAAG;AAEnF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,qaAgCnB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { CredentialsStoreLive } from "alchemy/Auth/Credentials";
2
+ import { ProfileStoreLive } from "alchemy/Auth/Profile";
3
+ import * as Provider from "alchemy/Provider";
4
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
5
+ import * as Layer from "effect/Layer";
6
+ import { ApiToken, ApiTokenProvider } from "./ApiToken.js";
7
+ import { TursoAuth } from "./AuthProvider.js";
8
+ import * as Credentials from "./Credentials.js";
9
+ import { Database, DatabaseProvider } from "./Database.js";
10
+ import { DatabaseToken, DatabaseTokenProvider } from "./DatabaseToken.js";
11
+ import { Group, GroupProvider } from "./Group.js";
12
+ import { GroupToken, GroupTokenProvider } from "./GroupToken.js";
13
+ import { OrganizationInvite, OrganizationInviteProvider } from "./OrganizationInvite.js";
14
+ import { OrganizationMember, OrganizationMemberProvider } from "./OrganizationMember.js";
15
+ import { OrganizationSettings, OrganizationSettingsProvider } from "./OrganizationSettings.js";
16
+ /**
17
+ * Service tag bundling all Turso providers + auth + credentials. Use
18
+ * `Turso.providers()` to materialize the full layer.
19
+ */
20
+ export class Providers extends Provider.ProviderCollection()("Turso") {
21
+ }
22
+ /**
23
+ * Build the complete Turso providers Layer: every Turso resource, the
24
+ * Turso AuthProvider registration (so `alchemy profile edit` can configure
25
+ * it), and credential resolution.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * Alchemy.Stack("App", { providers: Turso.providers() }, ...)
30
+ * ```
31
+ */
32
+ export const providers = () => Layer.effect(Providers, Provider.collection([
33
+ ApiToken,
34
+ Database,
35
+ DatabaseToken,
36
+ Group,
37
+ GroupToken,
38
+ OrganizationInvite,
39
+ OrganizationMember,
40
+ OrganizationSettings,
41
+ ])).pipe(Layer.provide(Layer.mergeAll(ApiTokenProvider(), DatabaseProvider(), DatabaseTokenProvider(), GroupProvider(), GroupTokenProvider(), OrganizationInviteProvider(), OrganizationMemberProvider(), OrganizationSettingsProvider())), Layer.provideMerge(Credentials.fromAuthProvider()), Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(TursoAuth), Layer.provideMerge(ProfileStoreLive), Layer.provideMerge(CredentialsStoreLive), Layer.orDie);
42
+ //# sourceMappingURL=Providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Providers.js","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAE/F;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,QAAQ,CAAC,kBAAkB,EAAa,CAAC,OAAO,CAAC;CAAG;AAInF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAC5B,KAAK,CAAC,MAAM,CACV,SAAS,EACT,QAAQ,CAAC,UAAU,CAAC;IAClB,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,KAAK;IACL,UAAU;IACV,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;CACrB,CAAC,CACH,CAAC,IAAI,CACJ,KAAK,CAAC,OAAO,CACX,KAAK,CAAC,QAAQ,CACZ,gBAAgB,EAAE,EAClB,gBAAgB,EAAE,EAClB,qBAAqB,EAAE,EACvB,aAAa,EAAE,EACf,kBAAkB,EAAE,EACpB,0BAA0B,EAAE,EAC5B,0BAA0B,EAAE,EAC5B,4BAA4B,EAAE,CAC/B,CACF,EACD,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,EAClD,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,EACzC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,EAC7B,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,EACpC,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,EACxC,KAAK,CAAC,KAAK,CACZ,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export * from "./ApiToken.ts";
2
+ export * from "./AuthProvider.ts";
3
+ export * from "./Connect.ts";
4
+ export { Credentials, CredentialsFromEnv, DEFAULT_API_BASE_URL, fromAuthProvider, fromToken, Organization, } from "./Credentials.ts";
5
+ export * from "./Database.ts";
6
+ export * from "./DatabaseToken.ts";
7
+ export * from "./Group.ts";
8
+ export * from "./GroupToken.ts";
9
+ export * from "./ManageDatabases.ts";
10
+ export * from "./OrganizationInvite.ts";
11
+ export * from "./OrganizationMember.ts";
12
+ export * from "./OrganizationSettings.ts";
13
+ export * from "./Providers.ts";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from "./ApiToken.js";
2
+ export * from "./AuthProvider.js";
3
+ export * from "./Connect.js";
4
+ export { Credentials, CredentialsFromEnv, DEFAULT_API_BASE_URL, fromAuthProvider, fromToken, Organization, } from "./Credentials.js";
5
+ export * from "./Database.js";
6
+ export * from "./DatabaseToken.js";
7
+ export * from "./Group.js";
8
+ export * from "./GroupToken.js";
9
+ export * from "./ManageDatabases.js";
10
+ export * from "./OrganizationInvite.js";
11
+ export * from "./OrganizationMember.js";
12
+ export * from "./OrganizationSettings.js";
13
+ export * from "./Providers.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy.run/turso",
3
- "version": "0.0.0",
3
+ "version": "2.0.0-beta.84",
4
4
  "description": "Turso databases, groups and tokens for Alchemy.",
5
5
  "keywords": [
6
6
  "alchemy",
@@ -9,12 +9,63 @@
9
9
  "libsql",
10
10
  "turso"
11
11
  ],
12
+ "homepage": "https://alchemy.run",
13
+ "bugs": {
14
+ "url": "https://github.com/alchemy-run/alchemy/issues"
15
+ },
12
16
  "license": "Apache-2.0",
13
17
  "author": "Sam Goodwin <sam@alchemy.run>",
14
- "homepage": "https://alchemy.run",
15
18
  "repository": {
16
19
  "type": "git",
17
20
  "url": "git+https://github.com/alchemy-run/alchemy.git",
18
21
  "directory": "packages/turso"
22
+ },
23
+ "files": [
24
+ "lib",
25
+ "src"
26
+ ],
27
+ "type": "module",
28
+ "sideEffects": false,
29
+ "exports": {
30
+ ".": {
31
+ "types": "./lib/index.d.ts",
32
+ "bun": "./src/index.ts",
33
+ "worker": "./src/index.ts",
34
+ "default": "./lib/index.js"
35
+ },
36
+ "./*": {
37
+ "types": "./lib/*.d.ts",
38
+ "bun": "./src/*.ts",
39
+ "worker": "./src/*.ts",
40
+ "default": "./lib/*.js"
41
+ },
42
+ "./package.json": "./package.json"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "dependencies": {
48
+ "@alchemy.run/sql": "2.0.0-beta.84",
49
+ "@distilled.cloud/core": "1.0.0-rc.17",
50
+ "@distilled.cloud/turso": "1.0.0-rc.17"
51
+ },
52
+ "devDependencies": {
53
+ "@types/bun": "1.4.3",
54
+ "alchemy": "2.0.0-beta.84",
55
+ "effect": "^4.0.5",
56
+ "typescript": "^7.0.2"
57
+ },
58
+ "peerDependencies": {
59
+ "alchemy": "2.0.0-beta.84",
60
+ "effect": "^4.0.5"
61
+ },
62
+ "alchemy": {
63
+ "contributes": [
64
+ "@alchemy.run/turso/Contributions"
65
+ ]
66
+ },
67
+ "scripts": {
68
+ "build": "pnpm -r --filter \"{.}...\" run build:package",
69
+ "build:package": "node scripts/build.ts"
19
70
  }
20
- }
71
+ }