@derive-to/artifacts 0.6.0 → 0.6.1

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 (64) hide show
  1. package/README.md +6 -7
  2. package/dist/host/client.d.ts +20 -4
  3. package/dist/host/client.d.ts.map +1 -1
  4. package/dist/host/client.js +29 -1
  5. package/dist/host/client.js.map +1 -1
  6. package/dist/host/index.d.ts +1 -1
  7. package/dist/host/index.d.ts.map +1 -1
  8. package/dist/host/index.js.map +1 -1
  9. package/dist/protocol/tools.d.ts +4 -0
  10. package/dist/protocol/tools.d.ts.map +1 -1
  11. package/dist/protocol/tools.js +5 -1
  12. package/dist/protocol/tools.js.map +1 -1
  13. package/dist/runtime/assets.js +1 -1
  14. package/dist/runtime.global.js +17 -17
  15. package/dist/server/adapters/kysely/index.d.ts +30 -0
  16. package/dist/server/adapters/kysely/index.d.ts.map +1 -0
  17. package/dist/server/adapters/kysely/index.js +31 -0
  18. package/dist/server/adapters/kysely/index.js.map +1 -0
  19. package/dist/server/adapters/kysely/schema.d.ts +11 -0
  20. package/dist/server/adapters/kysely/schema.d.ts.map +1 -0
  21. package/dist/server/adapters/kysely/schema.js +159 -0
  22. package/dist/server/adapters/kysely/schema.js.map +1 -0
  23. package/dist/server/adapters/kysely/sharing.d.ts +5 -0
  24. package/dist/server/adapters/kysely/sharing.d.ts.map +1 -0
  25. package/dist/server/adapters/kysely/sharing.js +81 -0
  26. package/dist/server/adapters/kysely/sharing.js.map +1 -0
  27. package/dist/server/adapters/kysely/store.d.ts +87 -0
  28. package/dist/server/adapters/kysely/store.d.ts.map +1 -0
  29. package/dist/server/adapters/kysely/store.js +328 -0
  30. package/dist/server/adapters/kysely/store.js.map +1 -0
  31. package/dist/server/adapters/sqlite/index.d.ts +7 -8
  32. package/dist/server/adapters/sqlite/index.d.ts.map +1 -1
  33. package/dist/server/adapters/sqlite/index.js +24 -44
  34. package/dist/server/adapters/sqlite/index.js.map +1 -1
  35. package/dist/server/bin.d.ts +3 -0
  36. package/dist/server/bin.d.ts.map +1 -0
  37. package/dist/server/bin.js +7 -0
  38. package/dist/server/bin.js.map +1 -0
  39. package/dist/server/cli.d.ts +8 -0
  40. package/dist/server/cli.d.ts.map +1 -0
  41. package/dist/server/cli.js +103 -0
  42. package/dist/server/cli.js.map +1 -0
  43. package/dist/server/kit/tool.d.ts +7 -1
  44. package/dist/server/kit/tool.d.ts.map +1 -1
  45. package/dist/server/kit/tool.js +9 -0
  46. package/dist/server/kit/tool.js.map +1 -1
  47. package/dist/server/kit.d.ts +1 -1
  48. package/dist/server/kit.d.ts.map +1 -1
  49. package/dist/server/kit.js +1 -1
  50. package/dist/server/kit.js.map +1 -1
  51. package/dist/server/sharing/store.d.ts +1 -1
  52. package/package.json +61 -55
  53. package/dist/server/adapters/sqlite/schema.d.ts +0 -3
  54. package/dist/server/adapters/sqlite/schema.d.ts.map +0 -1
  55. package/dist/server/adapters/sqlite/schema.js +0 -69
  56. package/dist/server/adapters/sqlite/schema.js.map +0 -1
  57. package/dist/server/adapters/sqlite/sharing.d.ts +0 -6
  58. package/dist/server/adapters/sqlite/sharing.d.ts.map +0 -1
  59. package/dist/server/adapters/sqlite/sharing.js +0 -81
  60. package/dist/server/adapters/sqlite/sharing.js.map +0 -1
  61. package/dist/server/adapters/sqlite/store.d.ts +0 -6
  62. package/dist/server/adapters/sqlite/store.d.ts.map +0 -1
  63. package/dist/server/adapters/sqlite/store.js +0 -130
  64. package/dist/server/adapters/sqlite/store.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { BlobStore, Bus } from "../../ports.js";
3
+ import type { SharingStore } from "../../sharing/store.js";
4
+ import { type KitTables, kyselyStoreOn } from "./store.js";
5
+ export type { KitTables };
6
+ export interface KyselyBackend {
7
+ store: ReturnType<typeof kyselyStoreOn>;
8
+ blobs: BlobStore;
9
+ bus: Bus;
10
+ /** Sharing in the same database, for `sharing({ store })`. */
11
+ sharing: SharingStore;
12
+ /** Create or upgrade the tables. Run during deployment. */
13
+ migrate(): Promise<void>;
14
+ /** The schema as SQL for this dialect, for a host's own migration tool. */
15
+ schemaSql(): string;
16
+ }
17
+ /**
18
+ * The kit's default storage: your own Kysely instance, on Postgres or SQLite. Artifacts,
19
+ * versions, comments, shared state, files and sharing live in `oa_*` tables beside yours;
20
+ * nothing else is opened. Live events stay in this process unless you pass a `bus` to the
21
+ * server (Postgres `LISTEN` comes with the `postgres()` adapter).
22
+ *
23
+ * ```ts
24
+ * const db = new Kysely<YourTables>({ dialect: new PostgresDialect({ pool }) })
25
+ * const backend = kysely(db)
26
+ * await backend.migrate()
27
+ * ```
28
+ */
29
+ export declare const kysely: <DB>(db: Kysely<DB>) => KyselyBackend;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAI1D,OAAO,EAAE,KAAK,SAAS,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAA;AAEzE,YAAY,EAAE,SAAS,EAAE,CAAA;AAEzB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IACvC,KAAK,EAAE,SAAS,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;IACR,8DAA8D;IAC9D,OAAO,EAAE,YAAY,CAAA;IACrB,2DAA2D;IAC3D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,2EAA2E;IAC3E,SAAS,IAAI,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,GAAI,EAAE,MAAM,MAAM,CAAC,EAAE,CAAC,KAAG,aAa3C,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { memoryBus } from "../memory-bus.js";
2
+ import { dialectOf, migrate, schemaSql } from "./schema.js";
3
+ import { kyselySharingOn } from "./sharing.js";
4
+ import { kyselyBlobsOn, kyselyStoreOn } from "./store.js";
5
+ /**
6
+ * The kit's default storage: your own Kysely instance, on Postgres or SQLite. Artifacts,
7
+ * versions, comments, shared state, files and sharing live in `oa_*` tables beside yours;
8
+ * nothing else is opened. Live events stay in this process unless you pass a `bus` to the
9
+ * server (Postgres `LISTEN` comes with the `postgres()` adapter).
10
+ *
11
+ * ```ts
12
+ * const db = new Kysely<YourTables>({ dialect: new PostgresDialect({ pool }) })
13
+ * const backend = kysely(db)
14
+ * await backend.migrate()
15
+ * ```
16
+ */
17
+ export const kysely = (db) => {
18
+ const dialect = dialectOf(db);
19
+ // The kit names only its own `oa_*` tables, which the host's table types do not describe;
20
+ // seen through the kit's own table types, the same instance runs the kit's queries.
21
+ const kit = db;
22
+ return {
23
+ store: kyselyStoreOn(kit, dialect),
24
+ blobs: kyselyBlobsOn(kit),
25
+ bus: memoryBus(),
26
+ sharing: kyselySharingOn(kit),
27
+ migrate: () => migrate(db),
28
+ schemaSql: () => schemaSql(db),
29
+ };
30
+ };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAkB,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAgBzE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAK,EAAc,EAAiB,EAAE;IAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;IAC7B,0FAA0F;IAC1F,oFAAoF;IACpF,MAAM,GAAG,GAAG,EAAkC,CAAA;IAC9C,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;QAClC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC;QACzB,GAAG,EAAE,SAAS,EAAE;QAChB,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;KAC/B,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { type Kysely } from "kysely";
2
+ /** The two SQL dialects the kit stores in. Anything else is refused, never guessed at. */
3
+ export type Dialect = "postgres" | "sqlite";
4
+ /** The dialect of a Kysely instance, from its adapter. */
5
+ export declare const dialectOf: <DB>(db: Kysely<DB>) => Dialect;
6
+ /** Create or upgrade the tables. Run during deployment, never from an artifact request. A
7
+ * failed migration is thrown with the step that failed. */
8
+ export declare const migrate: <DB>(db: Kysely<DB>) => Promise<void>;
9
+ /** The schema as SQL for this dialect, for a host that runs its own migration tool. */
10
+ export declare const schemaSql: <DB>(db: Kysely<DB>) => string;
11
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EAGZ,MAAM,QAAQ,CAAA;AAGf,0FAA0F;AAC1F,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAA;AAE3C,0DAA0D;AAC1D,eAAO,MAAM,SAAS,GAAI,EAAE,MAAM,MAAM,CAAC,EAAE,CAAC,KAAG,OAK9C,CAAA;AAoKD;4DAC4D;AAC5D,eAAO,MAAM,OAAO,GAAU,EAAE,MAAM,MAAM,CAAC,EAAE,CAAC,KAAG,OAAO,CAAC,IAAI,CAO9D,CAAA;AAED,uFAAuF;AACvF,eAAO,MAAM,SAAS,GAAI,EAAE,MAAM,MAAM,CAAC,EAAE,CAAC,KAAG,MAGxB,CAAA"}
@@ -0,0 +1,159 @@
1
+ import { PostgresAdapter, SqliteAdapter, } from "kysely";
2
+ import { Migrator } from "kysely/migration";
3
+ /** The dialect of a Kysely instance, from its adapter. */
4
+ export const dialectOf = (db) => {
5
+ const { adapter } = db.getExecutor();
6
+ if (adapter instanceof PostgresAdapter)
7
+ return "postgres";
8
+ if (adapter instanceof SqliteAdapter)
9
+ return "sqlite";
10
+ throw new Error("The artifact store runs on Postgres or SQLite; this Kysely dialect is neither.");
11
+ };
12
+ /** Column types that differ by dialect. Text everywhere else, so ids and times compare the
13
+ * same in both. */
14
+ const types = (dialect) => dialect === "postgres" ? { json: "jsonb", bytes: "bytea" } : { json: "text", bytes: "blob" };
15
+ const schemaStatements = (db, dialect) => {
16
+ const { json, bytes } = types(dialect);
17
+ const s = db.schema;
18
+ const cascade = (table) => `${table}.id`;
19
+ return [
20
+ s
21
+ .createTable("oa_artifacts")
22
+ .ifNotExists()
23
+ .addColumn("id", "text", (c) => c.primaryKey())
24
+ .addColumn("title", "text", (c) => c.notNull())
25
+ .addColumn("current_version", "integer", (c) => c.notNull())
26
+ .addColumn("created_at", "text", (c) => c.notNull())
27
+ .addColumn("updated_at", "text", (c) => c.notNull())
28
+ .addColumn("created_by", json, (c) => c.notNull())
29
+ .addColumn("space", "text", (c) => c.notNull().defaultTo(""))
30
+ .addColumn("summary", "text", (c) => c.notNull().defaultTo(""))
31
+ .addColumn("updated_by", json)
32
+ .addColumn("kind", "text", (c) => c.notNull().defaultTo("page")),
33
+ s
34
+ .createIndex("oa_artifacts_by_space")
35
+ .ifNotExists()
36
+ .on("oa_artifacts")
37
+ .columns(["space", "updated_at desc", "id desc"]),
38
+ s
39
+ .createTable("oa_versions")
40
+ .ifNotExists()
41
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
42
+ .addColumn("n", "integer", (c) => c.notNull())
43
+ .addColumn("content_hash", "text", (c) => c.notNull())
44
+ .addColumn("size", "integer", (c) => c.notNull())
45
+ .addColumn("csp", json, (c) => c.notNull())
46
+ .addColumn("created_at", "text", (c) => c.notNull())
47
+ .addColumn("created_by", json, (c) => c.notNull())
48
+ .addColumn("source_info", json)
49
+ .addPrimaryKeyConstraint("oa_versions_pkey", ["artifact_id", "n"]),
50
+ s
51
+ .createTable("oa_threads")
52
+ .ifNotExists()
53
+ .addColumn("id", "text", (c) => c.primaryKey())
54
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
55
+ .addColumn("state", "text", (c) => c.notNull()),
56
+ s.createIndex("oa_threads_by_artifact").ifNotExists().on("oa_threads").column("artifact_id"),
57
+ s
58
+ .createTable("oa_comments")
59
+ .ifNotExists()
60
+ .addColumn("id", "text", (c) => c.primaryKey())
61
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
62
+ .addColumn("thread_id", "text", (c) => c.notNull().references(cascade("oa_threads")).onDelete("cascade"))
63
+ .addColumn("version", "integer", (c) => c.notNull())
64
+ .addColumn("quote", json)
65
+ .addColumn("body", "text", (c) => c.notNull())
66
+ .addColumn("author", json, (c) => c.notNull())
67
+ .addColumn("created_at", "text", (c) => c.notNull()),
68
+ s
69
+ .createIndex("oa_comments_by_artifact")
70
+ .ifNotExists()
71
+ .on("oa_comments")
72
+ .columns(["artifact_id", "created_at"]),
73
+ s
74
+ .createTable("oa_states")
75
+ .ifNotExists()
76
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
77
+ .addColumn("key", "text", (c) => c.notNull())
78
+ .addColumn("items", json, (c) => c.notNull())
79
+ .addColumn("version", "integer", (c) => c.notNull())
80
+ .addPrimaryKeyConstraint("oa_states_pkey", ["artifact_id", "key"]),
81
+ s
82
+ .createTable("oa_activity")
83
+ .ifNotExists()
84
+ .addColumn("id", "integer", (c) => dialect === "postgres"
85
+ ? c.primaryKey().generatedAlwaysAsIdentity()
86
+ : c.primaryKey().autoIncrement())
87
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
88
+ .addColumn("key", "text", (c) => c.notNull())
89
+ .addColumn("action", "text", (c) => c.notNull())
90
+ .addColumn("item_id", "text", (c) => c.notNull())
91
+ .addColumn("version", "integer", (c) => c.notNull())
92
+ .addColumn("actor", json, (c) => c.notNull())
93
+ .addColumn("at", "text", (c) => c.notNull()),
94
+ s
95
+ .createIndex("oa_activity_by_key")
96
+ .ifNotExists()
97
+ .on("oa_activity")
98
+ .columns(["artifact_id", "key", "id desc"]),
99
+ s
100
+ .createTable("oa_blobs")
101
+ .ifNotExists()
102
+ .addColumn("key", "text", (c) => c.primaryKey())
103
+ .addColumn("type", "text", (c) => c.notNull())
104
+ .addColumn("bytes", bytes, (c) => c.notNull()),
105
+ s
106
+ .createTable("oa_share_settings")
107
+ .ifNotExists()
108
+ .addColumn("artifact_id", "text", (c) => c.primaryKey().references(cascade("oa_artifacts")).onDelete("cascade"))
109
+ .addColumn("space_access", "text", (c) => c.notNull())
110
+ .addColumn("link_role", "text", (c) => c.notNull())
111
+ .addColumn("link_token", "text", (c) => c.unique()),
112
+ s
113
+ .createTable("oa_share_grants")
114
+ .ifNotExists()
115
+ .addColumn("artifact_id", "text", (c) => c.notNull().references(cascade("oa_artifacts")).onDelete("cascade"))
116
+ .addColumn("actor_id", "text", (c) => c.notNull())
117
+ .addColumn("actor", json, (c) => c.notNull())
118
+ .addColumn("role", "text", (c) => c.notNull())
119
+ .addPrimaryKeyConstraint("oa_share_grants_pkey", ["artifact_id", "actor_id"]),
120
+ s
121
+ .createIndex("oa_share_grants_by_actor")
122
+ .ifNotExists()
123
+ .on("oa_share_grants")
124
+ .column("actor_id"),
125
+ ];
126
+ };
127
+ /** The ledger's own tables, beside the kit's. */
128
+ const LEDGER = {
129
+ migrationTableName: "oa_kysely_migrations",
130
+ migrationLockTableName: "oa_kysely_migrations_lock",
131
+ };
132
+ /** Forward-only migrations. Append; never edit. */
133
+ const migrations = (dialect) => ({
134
+ "0001_schema": {
135
+ up: async (db) => {
136
+ // oxlint-disable-next-line no-await-in-loop -- each statement needs the one before
137
+ for (const statement of schemaStatements(db, dialect))
138
+ await statement.execute();
139
+ },
140
+ },
141
+ });
142
+ const provider = (dialect) => ({
143
+ getMigrations: async () => migrations(dialect),
144
+ });
145
+ /** Create or upgrade the tables. Run during deployment, never from an artifact request. A
146
+ * failed migration is thrown with the step that failed. */
147
+ export const migrate = async (db) => {
148
+ const migrator = new Migrator({ db, provider: provider(dialectOf(db)), ...LEDGER });
149
+ const { error, results } = await migrator.migrateToLatest();
150
+ if (error) {
151
+ const failed = results?.find((result) => result.status === "Error")?.migrationName;
152
+ throw new Error(`Artifact migration ${failed ?? ""} failed.`, { cause: error });
153
+ }
154
+ };
155
+ /** The schema as SQL for this dialect, for a host that runs its own migration tool. */
156
+ export const schemaSql = (db) => `${schemaStatements(db, dialectOf(db))
157
+ .map((statement) => statement.compile().sql)
158
+ .join(";\n\n")};\n`;
159
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { SharingStore } from "../../sharing/store.js";
2
+ import type { KitDb } from "./store.js";
3
+ /** Sharing in the same database, in the two tables the kit's migration creates. */
4
+ export declare const kyselySharingOn: (db: KitDb) => SharingStore;
5
+ //# sourceMappingURL=sharing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/sharing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,mFAAmF;AACnF,eAAO,MAAM,eAAe,OAAQ,KAAK,KAAG,YAgF1C,CAAA"}
@@ -0,0 +1,81 @@
1
+ import { toShareGrant, toShareSettings } from "../sql-rows.js";
2
+ /** Sharing in the same database, in the two tables the kit's migration creates. */
3
+ export const kyselySharingOn = (db) => ({
4
+ settings: async (ids) => {
5
+ if (ids.length === 0)
6
+ return new Map();
7
+ const rows = await db
8
+ .selectFrom("oa_share_settings")
9
+ .selectAll()
10
+ .where("artifact_id", "in", [...ids])
11
+ .execute();
12
+ return new Map(rows.map(toShareSettings));
13
+ },
14
+ putSettings: async (artifactId, next) => {
15
+ const values = {
16
+ space_access: next.spaceAccess,
17
+ link_role: next.linkRole,
18
+ link_token: next.linkToken,
19
+ };
20
+ await db
21
+ .insertInto("oa_share_settings")
22
+ .values({ artifact_id: artifactId, ...values })
23
+ .onConflict((oc) => oc.column("artifact_id").doUpdateSet(values))
24
+ .execute();
25
+ },
26
+ artifactForLink: async (token) => {
27
+ const row = await db
28
+ .selectFrom("oa_share_settings")
29
+ .select("artifact_id")
30
+ .where("link_token", "=", token)
31
+ .where("link_role", "<>", "none")
32
+ .executeTakeFirst();
33
+ return row?.artifact_id ?? null;
34
+ },
35
+ grants: async (artifactId) => (await db
36
+ .selectFrom("oa_share_grants")
37
+ .selectAll()
38
+ .where("artifact_id", "=", artifactId)
39
+ .orderBy("actor_id")
40
+ .execute()).map((raw) => {
41
+ const { actor, role } = toShareGrant(raw);
42
+ return { actor, role };
43
+ }),
44
+ grantsFor: async (actorId, ids) => {
45
+ if (ids.length === 0)
46
+ return new Map();
47
+ const rows = await db
48
+ .selectFrom("oa_share_grants")
49
+ .selectAll()
50
+ .where("actor_id", "=", actorId)
51
+ .where("artifact_id", "in", [...ids])
52
+ .execute();
53
+ return new Map(rows.map((raw) => {
54
+ const { artifactId, role } = toShareGrant(raw);
55
+ return [artifactId, role];
56
+ }));
57
+ },
58
+ putGrant: async (artifactId, actor, role) => {
59
+ const values = { actor: JSON.stringify(actor), role };
60
+ await db
61
+ .insertInto("oa_share_grants")
62
+ .values({ artifact_id: artifactId, actor_id: actor.id, ...values })
63
+ .onConflict((oc) => oc.columns(["artifact_id", "actor_id"]).doUpdateSet(values))
64
+ .execute();
65
+ },
66
+ deleteGrant: async (artifactId, actorId) => {
67
+ const result = await db
68
+ .deleteFrom("oa_share_grants")
69
+ .where("artifact_id", "=", artifactId)
70
+ .where("actor_id", "=", actorId)
71
+ .executeTakeFirst();
72
+ return Number(result.numDeletedRows) > 0;
73
+ },
74
+ forget: async (artifactId) => {
75
+ await db.transaction().execute(async (trx) => {
76
+ await trx.deleteFrom("oa_share_grants").where("artifact_id", "=", artifactId).execute();
77
+ await trx.deleteFrom("oa_share_settings").where("artifact_id", "=", artifactId).execute();
78
+ });
79
+ },
80
+ });
81
+ //# sourceMappingURL=sharing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/sharing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { type ColumnType, type Generated, type Kysely } from "kysely";
2
+ import type { ArtifactStore, BlobStore } from "../../ports.js";
3
+ import type { Dialect } from "./schema.js";
4
+ /** A JSON column: written as text, read back as text (SQLite) or parsed (Postgres jsonb).
5
+ * Either way the row mappers parse it, so reads are typed `unknown` here. */
6
+ type Json = ColumnType<unknown, string, string>;
7
+ type NullableJson = ColumnType<unknown, string | null, string | null>;
8
+ /** The kit's tables, as Kysely sees them. */
9
+ export interface KitTables {
10
+ oa_artifacts: {
11
+ id: string;
12
+ title: string;
13
+ current_version: number;
14
+ created_at: string;
15
+ updated_at: string;
16
+ created_by: Json;
17
+ space: string;
18
+ summary: string;
19
+ updated_by: NullableJson;
20
+ kind: string;
21
+ };
22
+ oa_versions: {
23
+ artifact_id: string;
24
+ n: number;
25
+ content_hash: string;
26
+ size: number;
27
+ csp: Json;
28
+ created_at: string;
29
+ created_by: Json;
30
+ source_info: NullableJson;
31
+ };
32
+ oa_threads: {
33
+ id: string;
34
+ artifact_id: string;
35
+ state: string;
36
+ };
37
+ oa_comments: {
38
+ id: string;
39
+ artifact_id: string;
40
+ thread_id: string;
41
+ version: number;
42
+ quote: NullableJson;
43
+ body: string;
44
+ author: Json;
45
+ created_at: string;
46
+ };
47
+ oa_states: {
48
+ artifact_id: string;
49
+ key: string;
50
+ items: Json;
51
+ version: number;
52
+ };
53
+ oa_activity: {
54
+ id: Generated<number>;
55
+ artifact_id: string;
56
+ key: string;
57
+ action: string;
58
+ item_id: string;
59
+ version: number;
60
+ actor: Json;
61
+ at: string;
62
+ };
63
+ oa_blobs: {
64
+ key: string;
65
+ type: string;
66
+ bytes: Uint8Array;
67
+ };
68
+ oa_share_settings: {
69
+ artifact_id: string;
70
+ space_access: string;
71
+ link_role: string;
72
+ link_token: string | null;
73
+ };
74
+ oa_share_grants: {
75
+ artifact_id: string;
76
+ actor_id: string;
77
+ actor: Json;
78
+ role: string;
79
+ };
80
+ }
81
+ export type KitDb = Kysely<KitTables>;
82
+ export declare const kyselyStoreOn: (db: KitDb, dialect: Dialect) => ArtifactStore;
83
+ /** Files in the same database: no bucket to provision. Content-addressed, so a second put
84
+ * of the same key is a no-op. */
85
+ export declare const kyselyBlobsOn: (db: KitDb) => BlobStore;
86
+ export {};
87
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/kysely/store.ts"],"names":[],"mappings":"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"}