@oneie/sdk 0.8.0 → 0.10.0

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 (92) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +336 -190
  3. package/dist/auth.d.ts +102 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +156 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/brain.d.ts +36 -0
  8. package/dist/brain.d.ts.map +1 -0
  9. package/dist/brain.js +99 -0
  10. package/dist/brain.js.map +1 -0
  11. package/dist/client.d.ts +222 -30
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +339 -173
  14. package/dist/client.js.map +1 -1
  15. package/dist/compile.d.ts +123 -0
  16. package/dist/compile.d.ts.map +1 -0
  17. package/dist/compile.js +652 -0
  18. package/dist/compile.js.map +1 -0
  19. package/dist/fetch.d.ts +40 -0
  20. package/dist/fetch.d.ts.map +1 -0
  21. package/dist/fetch.js +158 -0
  22. package/dist/fetch.js.map +1 -0
  23. package/dist/generated/types.d.ts +104 -0
  24. package/dist/generated/types.d.ts.map +1 -0
  25. package/dist/generated/types.js +5 -0
  26. package/dist/generated/types.js.map +1 -0
  27. package/dist/index.d.ts +17 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/meta.d.ts +45 -0
  32. package/dist/meta.d.ts.map +1 -0
  33. package/dist/meta.js +44 -0
  34. package/dist/meta.js.map +1 -0
  35. package/dist/openapi.d.ts +27 -0
  36. package/dist/openapi.d.ts.map +1 -0
  37. package/dist/openapi.js +62 -0
  38. package/dist/openapi.js.map +1 -0
  39. package/dist/pay.d.ts +2 -2
  40. package/dist/pay.d.ts.map +1 -1
  41. package/dist/pay.js +5 -5
  42. package/dist/pay.js.map +1 -1
  43. package/dist/receivers.d.ts +743 -0
  44. package/dist/receivers.d.ts.map +1 -0
  45. package/dist/receivers.js +626 -0
  46. package/dist/receivers.js.map +1 -0
  47. package/dist/schemas.d.ts +39 -0
  48. package/dist/schemas.d.ts.map +1 -1
  49. package/dist/schemas.js +26 -0
  50. package/dist/schemas.js.map +1 -1
  51. package/dist/skills.d.ts +40 -0
  52. package/dist/skills.d.ts.map +1 -0
  53. package/dist/skills.js +16 -0
  54. package/dist/skills.js.map +1 -0
  55. package/dist/soul.d.ts +10 -0
  56. package/dist/soul.d.ts.map +1 -0
  57. package/dist/soul.js +31 -0
  58. package/dist/soul.js.map +1 -0
  59. package/dist/storage.d.ts +7 -8
  60. package/dist/storage.d.ts.map +1 -1
  61. package/dist/storage.js +61 -33
  62. package/dist/storage.js.map +1 -1
  63. package/dist/telemetry.d.ts +9 -0
  64. package/dist/telemetry.d.ts.map +1 -1
  65. package/dist/telemetry.js +11 -0
  66. package/dist/telemetry.js.map +1 -1
  67. package/dist/testing/index.d.ts.map +1 -1
  68. package/dist/testing/index.js +4 -3
  69. package/dist/testing/index.js.map +1 -1
  70. package/dist/types.d.ts +113 -22
  71. package/dist/types.d.ts.map +1 -1
  72. package/package.json +43 -17
  73. package/dist/react/context.d.ts +0 -11
  74. package/dist/react/context.d.ts.map +0 -1
  75. package/dist/react/context.js +0 -13
  76. package/dist/react/context.js.map +0 -1
  77. package/dist/react/hooks.d.ts +0 -104
  78. package/dist/react/hooks.d.ts.map +0 -1
  79. package/dist/react/hooks.js +0 -247
  80. package/dist/react/hooks.js.map +0 -1
  81. package/dist/react/index.d.ts +0 -6
  82. package/dist/react/index.d.ts.map +0 -1
  83. package/dist/react/index.js +0 -5
  84. package/dist/react/index.js.map +0 -1
  85. package/dist/react/optimistic.d.ts +0 -45
  86. package/dist/react/optimistic.d.ts.map +0 -1
  87. package/dist/react/optimistic.js +0 -52
  88. package/dist/react/optimistic.js.map +0 -1
  89. package/dist/react/stream.d.ts +0 -18
  90. package/dist/react/stream.d.ts.map +0 -1
  91. package/dist/react/stream.js +0 -60
  92. package/dist/react/stream.js.map +0 -1
package/dist/auth.d.ts ADDED
@@ -0,0 +1,102 @@
1
+ /**
2
+ * SDK auth-client wrapper (T10 — auth-client surface)
3
+ *
4
+ * Wraps Better Auth's createAuthClient to expose signIn.{passkey,email,google,wallet}
5
+ * matching the web auth-client shape (one.ie/web/src/lib/auth-client.ts).
6
+ *
7
+ * Better Auth's native client surfaces signIn.email and signIn.social (for google).
8
+ * passkey and wallet are custom server-side plugins; their sign-in flows are exposed
9
+ * here as typed wrappers over the auth endpoints.
10
+ */
11
+ import { clearToken } from "./storage.js";
12
+ export interface AuthClientOptions {
13
+ /** Defaults to https://one.ie in production, http://localhost:4321 in dev. */
14
+ baseURL?: string;
15
+ }
16
+ export interface EmailSignInOpts {
17
+ email: string;
18
+ password: string;
19
+ /** Redirect URL after sign-in (browser only). */
20
+ callbackURL?: string;
21
+ }
22
+ export interface PasskeySignInOpts {
23
+ /** Optional hint — browser credential ID to pre-select. */
24
+ credentialId?: string;
25
+ }
26
+ export interface WalletSignInOpts {
27
+ /** Sui wallet address (0x...). */
28
+ address: string;
29
+ /** HMAC-signed nonce from GET /api/auth/sui-wallet/nonce. */
30
+ nonce: string;
31
+ /** Ed25519 personal-message signature over the nonce message. */
32
+ signature: string;
33
+ }
34
+ export interface AuthSession {
35
+ token: string;
36
+ user: {
37
+ id: string;
38
+ email?: string | null;
39
+ name?: string | null;
40
+ };
41
+ }
42
+ export interface SignInResult {
43
+ data: AuthSession | null;
44
+ error: {
45
+ message: string;
46
+ status: number;
47
+ } | null;
48
+ }
49
+ /**
50
+ * Creates the SDK auth client. Returns a `signIn` namespace with four methods:
51
+ * - `signIn.email(opts)` — email + password → session token
52
+ * - `signIn.google(opts?)` — Google OAuth redirect (browser) or URL (Node)
53
+ * - `signIn.passkey(opts?)` — WebAuthn assertion via custom passkey-webauthn plugin
54
+ * - `signIn.wallet(opts)` — Sui SIWE via custom sui-wallet plugin
55
+ *
56
+ * Token is persisted to localStorage (browser) or ~/.config/oneie/token (Node).
57
+ */
58
+ export declare function createSdkAuthClient(options?: AuthClientOptions): {
59
+ signIn: {
60
+ /**
61
+ * Sign in with email + password.
62
+ * POST /api/auth/sign-in/email → session; persists token.
63
+ */
64
+ email(opts: EmailSignInOpts): Promise<SignInResult>;
65
+ /**
66
+ * Sign in with Google OAuth.
67
+ * In the browser: triggers redirect. In Node: returns the redirect URL.
68
+ * No token returned synchronously — the callback URL handles session creation.
69
+ */
70
+ google(opts?: {
71
+ callbackURL?: string;
72
+ }): Promise<{
73
+ redirectURL?: string;
74
+ }>;
75
+ /**
76
+ * Sign in with a passkey (WebAuthn assertion).
77
+ * Calls the custom passkey-webauthn plugin's assert endpoint directly
78
+ * since Better Auth v1.x does not ship a standard passkey client plugin.
79
+ *
80
+ * Callers must supply the WebAuthn assertion object; this method handles
81
+ * the HTTP round-trip and token persistence.
82
+ */
83
+ passkey(opts: PasskeySignInOpts & {
84
+ assertion: Record<string, unknown>;
85
+ challenge: string;
86
+ token: string;
87
+ }): Promise<SignInResult>;
88
+ /**
89
+ * Sign in with a Sui wallet (SIWE).
90
+ * Calls the custom sui-wallet plugin's verify endpoint.
91
+ * address + nonce + signature → session token.
92
+ */
93
+ wallet(opts: WalletSignInOpts): Promise<SignInResult>;
94
+ };
95
+ signOut: () => Promise<void>;
96
+ getToken: () => string | null;
97
+ clearToken: typeof clearToken;
98
+ /** Underlying Better Auth client — for session, useSession, etc. */
99
+ _client: unknown;
100
+ };
101
+ export type SdkAuthClient = ReturnType<typeof createSdkAuthClient>;
102
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAsB,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnD;AAWD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,iBAAiB;;QAc3D;;;WAGG;oBACe,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;QAYzD;;;;WAIG;sBACiB;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAShF;;;;;;;WAOG;sBACiB,iBAAiB,GAAG;YACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;SACf,GAAG,OAAO,CAAC,YAAY,CAAC;QA0BzB;;;;WAIG;qBACgB,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;;mBA2BnC,OAAO,CAAC,IAAI,CAAC;oBAMd,MAAM,GAAG,IAAI;;IASpC,oEAAoE;aAGtC,OAAO;EAExC;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
package/dist/auth.js ADDED
@@ -0,0 +1,156 @@
1
+ /**
2
+ * SDK auth-client wrapper (T10 — auth-client surface)
3
+ *
4
+ * Wraps Better Auth's createAuthClient to expose signIn.{passkey,email,google,wallet}
5
+ * matching the web auth-client shape (one.ie/web/src/lib/auth-client.ts).
6
+ *
7
+ * Better Auth's native client surfaces signIn.email and signIn.social (for google).
8
+ * passkey and wallet are custom server-side plugins; their sign-in flows are exposed
9
+ * here as typed wrappers over the auth endpoints.
10
+ */
11
+ import { createAuthClient } from "better-auth/client";
12
+ import { getToken, setToken, clearToken } from "./storage.js";
13
+ function resolveBaseURL(opt) {
14
+ if (opt)
15
+ return opt;
16
+ if (typeof process !== "undefined" && process.env["BETTER_AUTH_URL"]) {
17
+ return process.env["BETTER_AUTH_URL"];
18
+ }
19
+ if (typeof window !== "undefined")
20
+ return window.location.origin;
21
+ return "https://one.ie";
22
+ }
23
+ /**
24
+ * Creates the SDK auth client. Returns a `signIn` namespace with four methods:
25
+ * - `signIn.email(opts)` — email + password → session token
26
+ * - `signIn.google(opts?)` — Google OAuth redirect (browser) or URL (Node)
27
+ * - `signIn.passkey(opts?)` — WebAuthn assertion via custom passkey-webauthn plugin
28
+ * - `signIn.wallet(opts)` — Sui SIWE via custom sui-wallet plugin
29
+ *
30
+ * Token is persisted to localStorage (browser) or ~/.config/oneie/token (Node).
31
+ */
32
+ export function createSdkAuthClient(options) {
33
+ const baseURL = resolveBaseURL(options?.baseURL);
34
+ const _betterAuthClient = createAuthClient({ baseURL });
35
+ async function persistToken(res) {
36
+ // Better Auth v1.x returns the token inside data.token on email/social sign-in.
37
+ const data = res?.data;
38
+ if (data && typeof data["token"] === "string") {
39
+ setToken(data["token"]);
40
+ }
41
+ }
42
+ const signIn = {
43
+ /**
44
+ * Sign in with email + password.
45
+ * POST /api/auth/sign-in/email → session; persists token.
46
+ */
47
+ async email(opts) {
48
+ const res = await _betterAuthClient.signIn.email({
49
+ email: opts.email,
50
+ password: opts.password,
51
+ ...(opts.callbackURL ? { callbackURL: opts.callbackURL } : {}),
52
+ });
53
+ await persistToken(res);
54
+ const data = res.data;
55
+ const error = res.error;
56
+ return { data: data ?? null, error: error ?? null };
57
+ },
58
+ /**
59
+ * Sign in with Google OAuth.
60
+ * In the browser: triggers redirect. In Node: returns the redirect URL.
61
+ * No token returned synchronously — the callback URL handles session creation.
62
+ */
63
+ async google(opts) {
64
+ const res = await _betterAuthClient.signIn.social({
65
+ provider: "google",
66
+ callbackURL: opts?.callbackURL ?? (typeof window !== "undefined" ? window.location.href : baseURL),
67
+ });
68
+ const data = res.data;
69
+ return { redirectURL: data?.url };
70
+ },
71
+ /**
72
+ * Sign in with a passkey (WebAuthn assertion).
73
+ * Calls the custom passkey-webauthn plugin's assert endpoint directly
74
+ * since Better Auth v1.x does not ship a standard passkey client plugin.
75
+ *
76
+ * Callers must supply the WebAuthn assertion object; this method handles
77
+ * the HTTP round-trip and token persistence.
78
+ */
79
+ async passkey(opts) {
80
+ const res = await fetch(`${baseURL}/api/auth/passkey-webauthn/assert`, {
81
+ method: "POST",
82
+ headers: { "Content-Type": "application/json" },
83
+ body: JSON.stringify({
84
+ assertion: opts.assertion,
85
+ challenge: opts.challenge,
86
+ token: opts.token,
87
+ ...(opts.credentialId ? { credentialId: opts.credentialId } : {}),
88
+ }),
89
+ credentials: "include",
90
+ });
91
+ if (!res.ok) {
92
+ const msg = await res.text().catch(() => "passkey assert failed");
93
+ return { data: null, error: { message: msg, status: res.status } };
94
+ }
95
+ const body = await res.json();
96
+ const token = body["token"];
97
+ if (token)
98
+ setToken(token);
99
+ const session = body["session"];
100
+ return {
101
+ data: session ?? null,
102
+ error: null,
103
+ };
104
+ },
105
+ /**
106
+ * Sign in with a Sui wallet (SIWE).
107
+ * Calls the custom sui-wallet plugin's verify endpoint.
108
+ * address + nonce + signature → session token.
109
+ */
110
+ async wallet(opts) {
111
+ const res = await fetch(`${baseURL}/api/auth/sui-wallet/verify`, {
112
+ method: "POST",
113
+ headers: { "Content-Type": "application/json" },
114
+ body: JSON.stringify({
115
+ address: opts.address,
116
+ nonce: opts.nonce,
117
+ signature: opts.signature,
118
+ }),
119
+ credentials: "include",
120
+ });
121
+ if (!res.ok) {
122
+ const msg = await res.text().catch(() => "wallet verify failed");
123
+ return { data: null, error: { message: msg, status: res.status } };
124
+ }
125
+ const body = await res.json();
126
+ const token = body["token"];
127
+ if (token)
128
+ setToken(token);
129
+ const session = body["session"];
130
+ return {
131
+ data: session ?? null,
132
+ error: null,
133
+ };
134
+ },
135
+ };
136
+ /** Sign out — clears the server session and removes the persisted token. */
137
+ async function signOut() {
138
+ await _betterAuthClient.signOut();
139
+ clearToken();
140
+ }
141
+ /** Return the currently persisted token, or null. */
142
+ function getAuthToken() {
143
+ return getToken();
144
+ }
145
+ return {
146
+ signIn,
147
+ signOut,
148
+ getToken: getAuthToken,
149
+ clearToken,
150
+ /** Underlying Better Auth client — for session, useSession, etc. */
151
+ // Typed opaque: the inferred better-auth client type references a non-portable
152
+ // internal module (@better-auth/core/oauth2) and breaks .d.ts emit (TS2742).
153
+ _client: _betterAuthClient,
154
+ };
155
+ }
156
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * BrainClient — thin transport to the graph-in-RAM gateway (BrainDO).
3
+ *
4
+ * Reads (`isToxic`) hit DO memory and are always fresh; writes (`mark`, `warn`)
5
+ * patch memory and return immediately while TypeDB is written async. `subscribe`
6
+ * opens the WebSocket the DO pushes mutations and outcomes over (see C4).
7
+ *
8
+ * All calls go through the api.one.ie gateway with the existing GATEWAY_API_KEY —
9
+ * no new bindings, identical transport to the prior `callGateway` pattern.
10
+ */
11
+ export interface BrainEnv {
12
+ GATEWAY_URL?: string;
13
+ GATEWAY_API_KEY?: string;
14
+ }
15
+ export declare class BrainClient {
16
+ private base;
17
+ private key;
18
+ constructor(env: BrainEnv);
19
+ private headers;
20
+ isToxic(src: string, tgt: string): Promise<boolean>;
21
+ mark(src: string, tgt: string, delta?: number): Promise<void>;
22
+ warn(src: string, tgt: string, delta?: number): Promise<void>;
23
+ /** Open the push WebSocket. The DO broadcasts `{ type: 'mark'|'warn'|'reload'|'outcome', ... }`. */
24
+ subscribe(): Promise<WebSocket>;
25
+ /** Push a signal outcome to all subscribers. Replaces the KV-poll producer side. */
26
+ notify(id: string, outcome: string, payload?: unknown): Promise<void>;
27
+ /**
28
+ * Resolve when the outcome for `id` arrives on an open subscription socket — replaces
29
+ * 40 KV reads with a single push. `ws` comes from subscribe().
30
+ */
31
+ waitForOutcome(id: string, ws: WebSocket, timeoutMs?: number): Promise<{
32
+ outcome: string;
33
+ payload?: unknown;
34
+ }>;
35
+ }
36
+ //# sourceMappingURL=brain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,GAAG,CAAQ;gBAEP,GAAG,EAAE,QAAQ;IAKzB,OAAO,CAAC,OAAO;IAIT,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D,oGAAoG;IAC9F,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAWrC,oFAAoF;IAC9E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3E;;;OAGG;IACH,cAAc,CACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,SAAS,EACb,SAAS,SAAS,GACjB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CA8BnD"}
package/dist/brain.js ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * BrainClient — thin transport to the graph-in-RAM gateway (BrainDO).
3
+ *
4
+ * Reads (`isToxic`) hit DO memory and are always fresh; writes (`mark`, `warn`)
5
+ * patch memory and return immediately while TypeDB is written async. `subscribe`
6
+ * opens the WebSocket the DO pushes mutations and outcomes over (see C4).
7
+ *
8
+ * All calls go through the api.one.ie gateway with the existing GATEWAY_API_KEY —
9
+ * no new bindings, identical transport to the prior `callGateway` pattern.
10
+ */
11
+ const DEFAULT_GATEWAY = 'https://api.one.ie';
12
+ export class BrainClient {
13
+ base;
14
+ key;
15
+ constructor(env) {
16
+ this.base = `${env.GATEWAY_URL ?? DEFAULT_GATEWAY}/brain`;
17
+ this.key = env.GATEWAY_API_KEY ?? '';
18
+ }
19
+ headers() {
20
+ return { Authorization: `Bearer ${this.key}`, 'Content-Type': 'application/json' };
21
+ }
22
+ async isToxic(src, tgt) {
23
+ const res = await fetch(`${this.base}/toxic?src=${encodeURIComponent(src)}&tgt=${encodeURIComponent(tgt)}`, { headers: this.headers() });
24
+ if (!res.ok)
25
+ throw new Error(`brain/toxic ${res.status}`);
26
+ const data = (await res.json());
27
+ return data.toxic;
28
+ }
29
+ async mark(src, tgt, delta = 1) {
30
+ const res = await fetch(`${this.base}/mark`, {
31
+ method: 'POST',
32
+ headers: this.headers(),
33
+ body: JSON.stringify({ src, tgt, delta }),
34
+ });
35
+ if (!res.ok)
36
+ throw new Error(`brain/mark ${res.status}`);
37
+ }
38
+ async warn(src, tgt, delta = 1) {
39
+ const res = await fetch(`${this.base}/warn`, {
40
+ method: 'POST',
41
+ headers: this.headers(),
42
+ body: JSON.stringify({ src, tgt, delta }),
43
+ });
44
+ if (!res.ok)
45
+ throw new Error(`brain/warn ${res.status}`);
46
+ }
47
+ /** Open the push WebSocket. The DO broadcasts `{ type: 'mark'|'warn'|'reload'|'outcome', ... }`. */
48
+ async subscribe() {
49
+ const res = await fetch(`${this.base}/ws`, {
50
+ headers: { ...this.headers(), Upgrade: 'websocket' },
51
+ });
52
+ const ws = res.webSocket;
53
+ if (!ws)
54
+ throw new Error('brain/ws: no webSocket on response');
55
+ ws.accept?.();
56
+ return ws;
57
+ }
58
+ /** Push a signal outcome to all subscribers. Replaces the KV-poll producer side. */
59
+ async notify(id, outcome, payload) {
60
+ const res = await fetch(`${this.base}/notify`, {
61
+ method: 'POST',
62
+ headers: this.headers(),
63
+ body: JSON.stringify({ id, outcome, payload }),
64
+ });
65
+ if (!res.ok)
66
+ throw new Error(`brain/notify ${res.status}`);
67
+ }
68
+ /**
69
+ * Resolve when the outcome for `id` arrives on an open subscription socket — replaces
70
+ * 40 KV reads with a single push. `ws` comes from subscribe().
71
+ */
72
+ waitForOutcome(id, ws, timeoutMs = 10_000) {
73
+ return new Promise((resolve, reject) => {
74
+ const timer = setTimeout(() => {
75
+ ws.removeEventListener('message', onMessage);
76
+ resolve({ outcome: 'timeout' });
77
+ }, timeoutMs);
78
+ const onMessage = (ev) => {
79
+ try {
80
+ const msg = JSON.parse(typeof ev.data === 'string' ? ev.data : '');
81
+ if (msg.type === 'outcome' && msg.id === id) {
82
+ clearTimeout(timer);
83
+ ws.removeEventListener('message', onMessage);
84
+ resolve({ outcome: msg.outcome ?? 'result', payload: msg.payload });
85
+ }
86
+ }
87
+ catch {
88
+ /* ignore non-JSON frames (e.g. 'pong') */
89
+ }
90
+ };
91
+ ws.addEventListener('message', onMessage);
92
+ ws.addEventListener('error', () => {
93
+ clearTimeout(timer);
94
+ reject(new Error('brain/ws error'));
95
+ });
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=brain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.js","sourceRoot":"","sources":["../src/brain.ts"],"names":[],"mappings":"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"}