clanka 0.6.2 → 0.7.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.
package/dist/Xai.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { OpenAiClient, OpenAiLanguageModel } from "@effect/ai-openai";
5
+ import * as Layer from "effect/Layer";
6
+ import { AgentModelConfig } from "./Agent.ts";
7
+ import * as Model from "effect/unstable/ai/Model";
8
+ import type * as LanguageModel from "effect/unstable/ai/LanguageModel";
9
+ /**
10
+ * @since 1.0.0
11
+ * @category Layers
12
+ */
13
+ export declare const layerClient: Layer.Layer<OpenAiClient.OpenAiClient, never, import("./DeviceCodeHandler.ts").DeviceCodeHandler | import("effect/unstable/http/HttpClient").HttpClient | import("effect/unstable/persistence/KeyValueStore").KeyValueStore>;
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Layers
17
+ */
18
+ export declare const model: (model: string, options?: (OpenAiLanguageModel.Config["Service"] & typeof AgentModelConfig.Service) | undefined) => Model.Model<"xai", LanguageModel.LanguageModel, OpenAiClient.OpenAiClient>;
19
+ //# sourceMappingURL=Xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xai.d.ts","sourceRoot":"","sources":["../src/Xai.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,KAAK,aAAa,MAAM,kCAAkC,CAAA;AAEtE;;;GAGG;AACH,eAAO,MAAM,WAAW,8NAEmB,CAAA;AAE3C;;;GAGG;AACH,eAAO,MAAM,KAAK,UACT,MAAM,YAET,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,gBAAgB,CAAC,OAAO,CAAC,GACzE,SAAS,KACZ,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,YAAY,CA2BzE,CAAA"}
package/dist/Xai.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { OpenAiClient, OpenAiLanguageModel } from "@effect/ai-openai";
5
+ import * as Layer from "effect/Layer";
6
+ import * as Struct from "effect/Struct";
7
+ import { XaiAuth } from "./XaiAuth.js";
8
+ import { AgentModelConfig } from "./Agent.js";
9
+ import * as Compaction from "./Compaction.js";
10
+ import * as Model from "effect/unstable/ai/Model";
11
+ /**
12
+ * @since 1.0.0
13
+ * @category Layers
14
+ */
15
+ export const layerClient = OpenAiClient.layer({
16
+ apiUrl: "https://api.x.ai/v1",
17
+ }).pipe(Layer.provide(XaiAuth.layerClient));
18
+ /**
19
+ * @since 1.0.0
20
+ * @category Layers
21
+ */
22
+ export const model = (model, options) => Model.make("xai", model, Layer.mergeAll(OpenAiLanguageModel.layer({
23
+ model,
24
+ config: {
25
+ ...Struct.omit(options ?? {}, [
26
+ "systemPromptTransform",
27
+ "supportsImages",
28
+ ]),
29
+ store: false,
30
+ reasoning: { effort: "high", ...options?.reasoning },
31
+ },
32
+ }), AgentModelConfig.layer({
33
+ systemPromptTransform: options?.systemPromptTransform,
34
+ supportsImages: options?.supportsImages,
35
+ }),
36
+ // Cap compaction summaries; xAI honours max_output_tokens.
37
+ Layer.succeed(Compaction.SummarizerTransform, (effect) => OpenAiLanguageModel.withConfigOverride(effect, {
38
+ max_output_tokens: Compaction.summarizerMaxOutputTokens,
39
+ }))));
40
+ //# sourceMappingURL=Xai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xai.js","sourceRoot":"","sources":["../src/Xai.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AAGjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC;IAC5C,MAAM,EAAE,qBAAqB;CAC9B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,KAAa,EACb,OAEa,EAC+D,EAAE,CAC9E,KAAK,CAAC,IAAI,CACR,KAAK,EACL,KAAK,EACL,KAAK,CAAC,QAAQ,CACZ,mBAAmB,CAAC,KAAK,CAAC;IACxB,KAAK;IACL,MAAM,EAAE;QACN,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE;YAC5B,uBAAuB;YACvB,gBAAgB;SACjB,CAAC;QACF,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE;KACrD;CACF,CAAC,EACF,gBAAgB,CAAC,KAAK,CAAC;IACrB,qBAAqB,EAAE,OAAO,EAAE,qBAAqB;IACrD,cAAc,EAAE,OAAO,EAAE,cAAc;CACxC,CAAC;AACF,2DAA2D;AAC3D,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE,CACvD,mBAAmB,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7C,iBAAiB,EAAE,UAAU,CAAC,yBAAyB;CACxD,CAAC,CACH,CACF,CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Xai.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xai.test.d.ts","sourceRoot":"","sources":["../src/Xai.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,105 @@
1
+ import { assert, describe, it } from "@effect/vitest";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Exit from "effect/Exit";
4
+ import * as Layer from "effect/Layer";
5
+ import * as Stream from "effect/Stream";
6
+ import * as LanguageModel from "effect/unstable/ai/LanguageModel";
7
+ import * as Model from "effect/unstable/ai/Model";
8
+ import { HttpClient, HttpClientResponse, } from "effect/unstable/http";
9
+ import * as KeyValueStore from "effect/unstable/persistence/KeyValueStore";
10
+ import * as Compaction from "./Compaction.js";
11
+ import { DeviceCodeHandler } from "./DeviceCodeHandler.js";
12
+ import * as Public from "./index.js";
13
+ import * as Xai from "./Xai.js";
14
+ import { TokenData, toTokenStore } from "./XaiAuth.js";
15
+ const capture = () => {
16
+ const requests = [];
17
+ const client = HttpClient.make((request) => Effect.sync(() => {
18
+ requests.push(request);
19
+ return HttpClientResponse.fromWeb(request, new Response(JSON.stringify({
20
+ error: {
21
+ message: "transport probe",
22
+ type: "invalid_request_error",
23
+ },
24
+ }), { status: 400, headers: { "content-type": "application/json" } }));
25
+ }));
26
+ return { requests, layer: Layer.succeed(HttpClient.HttpClient, client) };
27
+ };
28
+ const body = (request) => {
29
+ if (request.body._tag !== "Uint8Array")
30
+ throw new Error("Expected JSON body");
31
+ return JSON.parse(new TextDecoder().decode(request.body.body));
32
+ };
33
+ const seed = Effect.gen(function* () {
34
+ yield* toTokenStore(yield* KeyValueStore.KeyValueStore)
35
+ .set("token", new TokenData({
36
+ access: "subscription-token",
37
+ refresh: "refresh",
38
+ expires: Date.now() + 3600000,
39
+ }))
40
+ .pipe(Effect.orDie);
41
+ });
42
+ const noLogin = Layer.succeed(DeviceCodeHandler, {
43
+ onCode: () => Effect.die("Cached credentials must not prompt"),
44
+ });
45
+ describe("Xai provider", () => {
46
+ it("exports Xai, but not XaiAuth, from the public entry point", () => {
47
+ assert.strictEqual(Public.Xai, Xai);
48
+ assert.isFalse("XaiAuth" in Public);
49
+ assert.strictEqual(Xai.model("grok-4.6").provider, "xai");
50
+ });
51
+ for (const effort of [undefined, "low"]) {
52
+ it.effect("uses authenticated HTTP Responses with " +
53
+ (effort ?? "default high") +
54
+ " reasoning", () => Effect.gen(function* () {
55
+ yield* seed;
56
+ const http = capture();
57
+ yield* Effect.gen(function* () {
58
+ assert.lengthOf(http.requests, 0, "Client construction must not trigger login or inference");
59
+ assert.strictEqual(yield* Model.ProviderName, "xai");
60
+ assert.strictEqual(yield* Model.ModelName, "grok-4.6");
61
+ const ai = yield* LanguageModel.LanguageModel;
62
+ const exit = yield* ai
63
+ .streamText({ prompt: "hello" })
64
+ .pipe(Stream.runDrain, Effect.exit);
65
+ assert.isTrue(Exit.isFailure(exit));
66
+ }).pipe(Effect.provide(Xai.model("grok-4.6", effort === undefined ? undefined : { reasoning: { effort } }).pipe(Layer.provide(Xai.layerClient), Layer.provide(http.layer), Layer.provide(noLogin))));
67
+ assert.lengthOf(http.requests, 1);
68
+ const request = http.requests[0];
69
+ assert.strictEqual(request.method, "POST");
70
+ assert.strictEqual(request.url, "https://api.x.ai/v1/responses");
71
+ assert.strictEqual(request.headers.authorization, "Bearer subscription-token");
72
+ assert.match(request.headers["user-agent"], /clanka/i);
73
+ assert.notMatch(request.headers["user-agent"], /opencode/i);
74
+ assert.deepInclude(body(request), {
75
+ model: "grok-4.6",
76
+ store: false,
77
+ stream: true,
78
+ });
79
+ assert.deepInclude(body(request).reasoning, {
80
+ effort: effort ?? "high",
81
+ });
82
+ assert.isFalse("max_output_tokens" in body(request));
83
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
84
+ }
85
+ it.effect("caps summaries at 4k without leaking the cap into subsequent requests", () => Effect.gen(function* () {
86
+ yield* seed;
87
+ const http = capture();
88
+ yield* Effect.gen(function* () {
89
+ const ai = yield* LanguageModel.LanguageModel;
90
+ const summarize = yield* Compaction.SummarizerTransform;
91
+ yield* summarize(ai.streamText({ prompt: "summarize" }).pipe(Stream.runDrain)).pipe(Effect.exit);
92
+ yield* ai
93
+ .streamText({ prompt: "continue" })
94
+ .pipe(Stream.runDrain, Effect.exit);
95
+ }).pipe(Effect.provide(Xai.model("grok-4.6").pipe(Layer.provide(Xai.layerClient), Layer.provide(http.layer), Layer.provide(noLogin))));
96
+ assert.lengthOf(http.requests, 2);
97
+ assert.strictEqual(body(http.requests[0]).max_output_tokens, 4000);
98
+ assert.isFalse("max_output_tokens" in body(http.requests[1]));
99
+ for (const request of http.requests) {
100
+ assert.strictEqual(request.url, "https://api.x.ai/v1/responses");
101
+ assert.strictEqual(body(request).store, false);
102
+ }
103
+ }).pipe(Effect.provide(KeyValueStore.layerMemory)));
104
+ });
105
+ //# sourceMappingURL=Xai.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xai.test.js","sourceRoot":"","sources":["../src/Xai.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ /** @effect-diagnostics schemaNumber:off */
5
+ import * as Context from "effect/Context";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Layer from "effect/Layer";
8
+ import * as Schema from "effect/Schema";
9
+ import * as HttpClient from "effect/unstable/http/HttpClient";
10
+ import * as KeyValueStore from "effect/unstable/persistence/KeyValueStore";
11
+ import { DeviceCodeHandler } from "./DeviceCodeHandler.ts";
12
+ declare const TokenData_base: Schema.Class<TokenData, Schema.Struct<{
13
+ readonly access: Schema.String;
14
+ readonly refresh: Schema.String;
15
+ readonly expires: Schema.Number;
16
+ }>, {}>;
17
+ export declare class TokenData extends TokenData_base {
18
+ isExpired(): boolean;
19
+ }
20
+ declare const XaiAuthError_base: Schema.Class<XaiAuthError, Schema.TaggedStruct<"XaiAuthError", {
21
+ readonly reason: Schema.Literals<readonly ["DeviceFlowFailed", "RefreshFailed"]>;
22
+ readonly message: Schema.String;
23
+ readonly cause: Schema.optional<Schema.Defect>;
24
+ }>, import("effect/Cause").YieldableError>;
25
+ export declare class XaiAuthError extends XaiAuthError_base {
26
+ }
27
+ export declare const toTokenStore: (store: KeyValueStore.KeyValueStore) => KeyValueStore.SchemaStore<typeof TokenData>;
28
+ declare const XaiAuth_base: Context.ServiceClass<XaiAuth, "clanka/XaiAuth", {
29
+ readonly get: Effect.Effect<TokenData, XaiAuthError>;
30
+ readonly authenticate: Effect.Effect<TokenData, XaiAuthError>;
31
+ readonly logout: Effect.Effect<void>;
32
+ }>;
33
+ export declare class XaiAuth extends XaiAuth_base {
34
+ static readonly make: Effect.Effect<{
35
+ readonly get: Effect.Effect<TokenData, XaiAuthError>;
36
+ readonly authenticate: Effect.Effect<TokenData, XaiAuthError>;
37
+ readonly logout: Effect.Effect<void>;
38
+ }, never, DeviceCodeHandler | HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
39
+ static readonly layer: Layer.Layer<XaiAuth, never, DeviceCodeHandler | HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
40
+ static readonly layerClient: Layer.Layer<HttpClient.HttpClient, never, DeviceCodeHandler | HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=XaiAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XaiAuth.d.ts","sourceRoot":"","sources":["../src/XaiAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,2CAA2C;AAC3C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAG7D,OAAO,KAAK,aAAa,MAAM,2CAA2C,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;;;;;;AAQ1D,qBAAa,SAAU,SAAQ,cAM7B;IACA,SAAS,IAAI,OAAO,CAEnB;CACF;;;;;;AAED,qBAAa,YAAa,SAAQ,iBAOjC;CAAG;AA2BJ,eAAO,MAAM,YAAY,UAAW,aAAa,CAAC,aAAa,gDAI5D,CAAA;;kBAKe,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;2BAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;qBAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AALxC,qBAAa,OAAQ,SAAQ,YAOR;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAI;sBALJ,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;+BAC7B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;yBAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;uFAyKpC;IAEF,MAAM,CAAC,QAAQ,CAAC,KAAK,uGAAsC;IAC3D,MAAM,CAAC,QAAQ,CAAC,WAAW,qHAkBS;CACrC"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ /** @effect-diagnostics schemaNumber:off */
5
+ import * as Context from "effect/Context";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Layer from "effect/Layer";
8
+ import * as Option from "effect/Option";
9
+ import * as Schedule from "effect/Schedule";
10
+ import * as Schema from "effect/Schema";
11
+ import * as Semaphore from "effect/Semaphore";
12
+ import * as HttpClient from "effect/unstable/http/HttpClient";
13
+ import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
14
+ import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
15
+ import * as KeyValueStore from "effect/unstable/persistence/KeyValueStore";
16
+ import { DeviceCodeHandler } from "./DeviceCodeHandler.js";
17
+ const CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
18
+ const ISSUER = "https://auth.x.ai";
19
+ const TOKEN_URL = ISSUER + "/oauth2/token";
20
+ const DEFAULT_TOKEN_EXPIRY_SECONDS = 3600;
21
+ const DEFAULT_DEVICE_EXPIRY_SECONDS = 600;
22
+ export class TokenData extends Schema.Class("clanka/XaiAuth/TokenData")({
23
+ access: Schema.String,
24
+ refresh: Schema.String,
25
+ expires: Schema.Number,
26
+ }) {
27
+ isExpired() {
28
+ return this.expires < Date.now() + 30_000;
29
+ }
30
+ }
31
+ export class XaiAuthError extends Schema.TaggedError()("XaiAuthError", {
32
+ reason: Schema.Literals(["DeviceFlowFailed", "RefreshFailed"]),
33
+ message: Schema.String,
34
+ cause: Schema.optional(Schema.Defect()),
35
+ }) {
36
+ }
37
+ const DeviceCodeResponse = Schema.Struct({
38
+ device_code: Schema.String,
39
+ user_code: Schema.String,
40
+ verification_uri: Schema.String,
41
+ expires_in: Schema.Number,
42
+ interval: Schema.optional(Schema.Number),
43
+ });
44
+ const TokenResponse = Schema.Struct({
45
+ access_token: Schema.String,
46
+ refresh_token: Schema.optional(Schema.String),
47
+ expires_in: Schema.optional(Schema.Number),
48
+ });
49
+ const TokenError = Schema.Struct({
50
+ error: Schema.String,
51
+ interval: Schema.optional(Schema.Number),
52
+ });
53
+ const PollResponse = Schema.Union([TokenResponse, TokenError]);
54
+ const toTokenData = (token, refresh = "") => new TokenData({
55
+ access: token.access_token,
56
+ refresh: token.refresh_token || refresh,
57
+ expires: Date.now() + (token.expires_in ?? DEFAULT_TOKEN_EXPIRY_SECONDS) * 1000,
58
+ });
59
+ export const toTokenStore = (store) => KeyValueStore.toSchemaStore(KeyValueStore.prefix(store, "xai.auth/"), TokenData);
60
+ export class XaiAuth extends Context.Service()("clanka/XaiAuth") {
61
+ static make = Effect.gen(function* () {
62
+ const verification = yield* DeviceCodeHandler;
63
+ const tokenStore = toTokenStore(yield* KeyValueStore.KeyValueStore);
64
+ const httpClient = (yield* HttpClient.HttpClient).pipe(HttpClient.mapRequest(HttpClientRequest.setHeader("User-Agent", "clanka")), HttpClient.retryTransient({
65
+ retryOn: "errors-and-responses",
66
+ times: 5,
67
+ schedule: Schedule.min([
68
+ Schedule.exponential(150),
69
+ Schedule.spaced(5000),
70
+ ]),
71
+ }));
72
+ const semaphore = Semaphore.makeUnsafe(1);
73
+ let currentToken = yield* tokenStore.get("token").pipe(Effect.catchTag("SchemaError", () => tokenStore.remove("token").pipe(Effect.as(Option.none()))), Effect.orDie);
74
+ const saveToken = (token) => tokenStore.set("token", token).pipe(Effect.orDie, Effect.tap(() => Effect.sync(() => {
75
+ currentToken = Option.some(token);
76
+ })), Effect.as(token));
77
+ const clearToken = tokenStore.remove("token").pipe(Effect.orDie, Effect.tap(() => Effect.sync(() => {
78
+ currentToken = Option.none();
79
+ })));
80
+ const authenticateWithDeviceFlow = Effect.gen(function* () {
81
+ const response = yield* HttpClientRequest.post(ISSUER + "/oauth2/device/code").pipe(HttpClientRequest.bodyUrlParams({
82
+ client_id: CLIENT_ID,
83
+ scope: "openid profile email offline_access grok-cli:access api:access",
84
+ referrer: "clanka",
85
+ }), httpClient.execute, Effect.flatMap(HttpClientResponse.filterStatusOk));
86
+ const device = yield* HttpClientResponse.schemaBodyJson(DeviceCodeResponse)(response);
87
+ yield* verification.onCode({
88
+ verifyUrl: device.verification_uri,
89
+ deviceCode: device.user_code,
90
+ });
91
+ const request = HttpClientRequest.post(TOKEN_URL).pipe(HttpClientRequest.bodyUrlParams({
92
+ client_id: CLIENT_ID,
93
+ device_code: device.device_code,
94
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
95
+ }));
96
+ let delayMs = Math.max(device.interval ?? 5, 1) * 1000;
97
+ const poll = Effect.gen(function* () {
98
+ while (true) {
99
+ // OAuth errors arrive as HTTP 400; decode their bodies before deciding whether to retry.
100
+ const response = yield* httpClient.execute(request);
101
+ const payload = yield* HttpClientResponse.schemaBodyJson(PollResponse)(response);
102
+ if ("access_token" in payload) {
103
+ yield* HttpClientResponse.filterStatusOk(response);
104
+ return toTokenData(payload);
105
+ }
106
+ if (payload.error === "slow_down") {
107
+ delayMs = Math.max(delayMs, (payload.interval ?? 0) * 1000) + 5000;
108
+ }
109
+ else if (payload.error !== "authorization_pending") {
110
+ return yield* new XaiAuthError({
111
+ reason: "DeviceFlowFailed",
112
+ message: `xAI device authorization failed: ${payload.error}`,
113
+ });
114
+ }
115
+ yield* Effect.sleep(delayMs + 3000);
116
+ }
117
+ });
118
+ return yield* poll.pipe(Effect.timeoutOrElse({
119
+ duration: (device.expires_in > 0
120
+ ? device.expires_in
121
+ : DEFAULT_DEVICE_EXPIRY_SECONDS) * 1000,
122
+ orElse: () => Effect.fail(new XaiAuthError({
123
+ reason: "DeviceFlowFailed",
124
+ message: "xAI device authorization failed: expired_token",
125
+ })),
126
+ }));
127
+ }).pipe(Effect.mapError((cause) => cause instanceof XaiAuthError
128
+ ? cause
129
+ : new XaiAuthError({
130
+ reason: "DeviceFlowFailed",
131
+ message: "Failed to authorize xAI device",
132
+ cause,
133
+ })));
134
+ const refreshToken = Effect.fn("XaiAuth.refreshToken")(function* (refresh) {
135
+ const response = yield* HttpClientRequest.post(TOKEN_URL).pipe(HttpClientRequest.bodyUrlParams({
136
+ client_id: CLIENT_ID,
137
+ grant_type: "refresh_token",
138
+ refresh_token: refresh,
139
+ }), httpClient.execute, Effect.flatMap(HttpClientResponse.filterStatusOk));
140
+ return toTokenData(yield* HttpClientResponse.schemaBodyJson(TokenResponse)(response), refresh);
141
+ }, Effect.mapError((cause) => new XaiAuthError({
142
+ reason: "RefreshFailed",
143
+ message: "Failed to refresh xAI access token",
144
+ cause,
145
+ })));
146
+ const authenticate = Effect.uninterruptibleMask(Effect.fnUntraced(function* (restore) {
147
+ return yield* saveToken(yield* restore(authenticateWithDeviceFlow));
148
+ }));
149
+ const get = Effect.uninterruptibleMask(Effect.fnUntraced(function* (restore) {
150
+ if (Option.isSome(currentToken)) {
151
+ if (!currentToken.value.isExpired())
152
+ return currentToken.value;
153
+ const refreshed = yield* restore(refreshToken(currentToken.value.refresh).pipe(Effect.option));
154
+ if (Option.isSome(refreshed))
155
+ return yield* saveToken(refreshed.value);
156
+ yield* clearToken;
157
+ }
158
+ return yield* saveToken(yield* restore(authenticateWithDeviceFlow));
159
+ }));
160
+ return XaiAuth.of({
161
+ get: semaphore.withPermit(get),
162
+ authenticate: semaphore.withPermit(authenticate),
163
+ logout: semaphore.withPermit(Effect.uninterruptible(clearToken)),
164
+ });
165
+ });
166
+ static layer = Layer.effect(XaiAuth, XaiAuth.make);
167
+ static layerClient = Layer.effect(HttpClient.HttpClient, Effect.gen(function* () {
168
+ const auth = yield* XaiAuth;
169
+ return (yield* HttpClient.HttpClient).pipe(HttpClient.mapRequestEffect((request) => auth.get.pipe(Effect.map((token) => request.pipe(HttpClientRequest.bearerToken(token.access), HttpClientRequest.setHeader("User-Agent", "clanka"))), Effect.orDie)));
170
+ })).pipe(Layer.provide(XaiAuth.layer));
171
+ }
172
+ //# sourceMappingURL=XaiAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XaiAuth.js","sourceRoot":"","sources":["../src/XaiAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=XaiAuth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XaiAuth.test.d.ts","sourceRoot":"","sources":["../src/XaiAuth.test.ts"],"names":[],"mappings":""}