···11import type { KittyAgent } from "kitty-agent";
22-import { IoGitlabKinklistKinklistProfile } from "../lexicons";
22+import { IoGitlabKinklistKinklistList, IoGitlabKinklistKinklistProfile } from "../lexicons";
33import { Did } from "@atcute/lexicons";
44import { slingshotClient } from "./slingshot";
55+import { now as tidNow } from '@atcute/tid';
5667export class KinklistClient {
78 constructor(private readonly loginState: {
···24252526 get user() {
2627 return this.loginState;
2828+ }
2929+3030+ async createList(list: Omit<IoGitlabKinklistKinklistList.Main, "createdAt" | "$type">) {
3131+ const { uri, cid } = await this.agent.put({
3232+ collection: 'io.gitlab.kinklist.kinklist.list',
3333+ repo: this.user.did,
3434+ rkey: tidNow(),
3535+ record: {
3636+ $type: 'io.gitlab.kinklist.kinklist.list',
3737+ ...list,
3838+ createdAt: new Date().toISOString(),
3939+ },
4040+ });
4141+4242+ return { uri, cid };
2743 }
28442945 async createOrUpdateProfile(profile: Omit<IoGitlabKinklistKinklistProfile.Main, "createdAt" | "updatedAt" | "$type">) {
+1-1
public/atproto/signed-in-user.ts
···22import { KinklistClient } from "./client";
33import { computed, signal } from "@preact/signals";
4455-import metadata from '../client-metadata4.json' with { type: 'json' };
55+import metadata from '../client-metadata5.json' with { type: 'json' };
6677export const oauthClient = new StatefulPreactOAuthClient<KinklistClient>(
88 {
···11import { choiceOptions } from "./base";
22-import { KinkCategory, Kink } from "./main";
22+import type { KinkCategory, Kink } from "./parser";
3344const IMGUR_CLIENT_ID = '9db53e5936cd02f';
55
+2-2
public/index.html
···4545 detectColorScheme();
4646 </script>
47474848- <link rel="stylesheet" href="style.css">
4848+ <link rel="stylesheet" href="/style.css">
4949</head>
50505151<body>
5252 <div id="root"></div>
53535454 <!-- defer is used here so that DOMTools is loaded in time as it's async -->
5555- <script src="kinklist.js"></script>
5555+ <script src="/kinklist.js"></script>
5656</body>
57575858</html>
+4-2
public/kinks.ts
···11-export const kinkText = `
11+import { parseKinks } from "./parser" with { type: "comptime" };
22+33+export const defaultKinks = parseKinks(`
24#Bodies
35(Self, Partner)
46* Skinny
···220222* Scratching ::: Love scratches, or any kind of sexually-oriented skin scratching that doesn't draw blood.
221223* Biting ::: Bites, typically on the neck, that don't draw blood.
222224* Cutting ::: Purposefully cutting the skin to draw blood, can refer to knife play but also applies to physical interactions that draw blood in general.
223223-`.trim();225225+`.trim());
+1
public/lexicons/index.ts
···33export * as BlueMicrocosmLinksGetManyToManyCounts from "./types/blue/microcosm/links/getManyToManyCounts.js";
44export * as ComBadExampleIdentityResolveMiniDoc from "./types/com/bad-example/identity/resolveMiniDoc.js";
55export * as ComBadExampleRepoGetUriRecord from "./types/com/bad-example/repo/getUriRecord.js";
66+export * as IoGitlabKinklistKinklistList from "./types/io/gitlab/kinklist/kinklist/list.js";
67export * as IoGitlabKinklistKinklistProfile from "./types/io/gitlab/kinklist/kinklist/profile.js";
···11import "@typelex/emitter";
22import "./externals.tsp";
3344+namespace io.gitlab.kinklist.kinklist.list {
55+ /** A shared kink list */
66+ @rec("tid")
77+ model Main {
88+ /** Array of kink category/section definitions */
99+ @required kinkDefinitions: io.gitlab.kinklist.kinklist.profile.KinkCategory[];
1010+1111+ /** When this list was created */
1212+ @required createdAt: datetime;
1313+ }
1414+}
1515+416namespace io.gitlab.kinklist.kinklist.profile {
517 /** My kink list profile. */
618 @rec("literal:self")