@cat-factory/integrations 0.90.0 → 0.91.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.
@@ -20,6 +20,8 @@ export interface ApiKeySummary {
20
20
  inputTokens: number;
21
21
  outputTokens: number;
22
22
  requestCount: number;
23
+ enabled: boolean;
24
+ isDefault: boolean;
23
25
  }
24
26
  /** A leased key: the decrypted secret plus the row id (for usage attribution). */
25
27
  export interface LeasedApiKey {
@@ -46,6 +48,15 @@ export declare class ApiKeyService {
46
48
  }): Promise<ApiKeySummary>;
47
49
  /** All live keys for a scope (optionally filtered by provider), metadata only. */
48
50
  listKeys(scope: ApiKeyScope, scopeId: string, provider?: ApiKeyProvider): Promise<ApiKeySummary[]>;
51
+ /**
52
+ * Enable/disable and/or (un)pin the default of a pool key. Both flags are optional;
53
+ * pinning a default clears any prior default of the same (scope, provider), and
54
+ * un-pinning clears it only when THIS key was the default. Returns the updated metadata.
55
+ */
56
+ updateKey(scope: ApiKeyScope, scopeId: string, id: string, patch: {
57
+ enabled?: boolean;
58
+ isDefault?: boolean;
59
+ }): Promise<ApiKeySummary>;
49
60
  /** Remove a key from its scope's pool. */
50
61
  removeKey(scope: ApiKeyScope, scopeId: string, id: string): Promise<void>;
51
62
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAEX,KAAK,EACL,WAAW,EAEX,wBAAwB,EACxB,YAAY,EACZ,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAmB5B,MAAM,WAAW,yBAAyB;IACxC,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,WAAW,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,cAAc,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,yBAAyB,EAAI;IAEhE,OAAO,KAAK,QAAQ,GAEnB;IAED,mCAAmC;IAC7B,MAAM,CACV,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAE,QAAQ,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,aAAa,CAAC,CA+BxB;IAED,kFAAkF;IAC5E,QAAQ,CACZ,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,aAAa,EAAE,CAAC,CAG1B;IAED,0CAA0C;IACpC,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;IAED;;;OAGG;YACW,UAAU;IAWxB,wEAAwE;IAClE,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,CAIlB;IAED,4EAA4E;IACtE,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAG9F;IAED;;;;;OAKG;IACG,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAgCvB;IAED,mFAAmF;IAC7E,WAAW,CACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC,CAOf;CACF"}
1
+ {"version":3,"file":"ApiKeyService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ConflictError } from '@cat-factory/kernel';
1
+ import { ConflictError, NotFoundError } from '@cat-factory/kernel';
2
2
  import { DEFAULT_USAGE_WINDOW_MS } from './providers.logic.js';
3
3
  // ApiKeyService: owns the direct-provider API-key pool (OpenAI/Anthropic/Qwen/
4
4
  // DeepSeek/Moonshot). Keys are onboarded via the UI and stored *encrypted* (a
@@ -43,6 +43,8 @@ export class ApiKeyService {
43
43
  inputTokens: 0,
44
44
  outputTokens: 0,
45
45
  requestCount: 0,
46
+ enabled: true,
47
+ isDefault: false,
46
48
  deletedAt: null,
47
49
  };
48
50
  await this.deps.providerApiKeyRepository.add(record);
@@ -53,6 +55,29 @@ export class ApiKeyService {
53
55
  const rows = await this.deps.providerApiKeyRepository.listByScope(scope, scopeId, provider);
54
56
  return rows.map(toSummary);
55
57
  }
58
+ /**
59
+ * Enable/disable and/or (un)pin the default of a pool key. Both flags are optional;
60
+ * pinning a default clears any prior default of the same (scope, provider), and
61
+ * un-pinning clears it only when THIS key was the default. Returns the updated metadata.
62
+ */
63
+ async updateKey(scope, scopeId, id, patch) {
64
+ const repo = this.deps.providerApiKeyRepository;
65
+ const existing = await repo.getById(scope, scopeId, id);
66
+ if (!existing) {
67
+ throw new NotFoundError(`${scope} API key`, id);
68
+ }
69
+ if (patch.enabled !== undefined) {
70
+ await repo.setEnabled(scope, scopeId, id, patch.enabled);
71
+ }
72
+ if (patch.isDefault === true) {
73
+ await repo.setDefault(scope, scopeId, existing.provider, id);
74
+ }
75
+ else if (patch.isDefault === false && existing.isDefault) {
76
+ await repo.setDefault(scope, scopeId, existing.provider, null);
77
+ }
78
+ const updated = await repo.getById(scope, scopeId, id);
79
+ return toSummary(updated ?? existing);
80
+ }
56
81
  /** Remove a key from its scope's pool. */
57
82
  async removeKey(scope, scopeId, id) {
58
83
  await this.deps.providerApiKeyRepository.softDelete(scope, scopeId, id, this.deps.clock.now());
@@ -128,6 +153,8 @@ function toSummary(record) {
128
153
  inputTokens: record.inputTokens,
129
154
  outputTokens: record.outputTokens,
130
155
  requestCount: record.requestCount,
156
+ enabled: record.enabled,
157
+ isDefault: record.isDefault,
131
158
  };
132
159
  }
133
160
  //# sourceMappingURL=ApiKeyService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeyService.js","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeyService.js","sourceRoot":"","sources":["../../../src/modules/providers/ApiKeyService.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ export interface VendorCredentialSummary {
19
19
  inputTokens: number;
20
20
  outputTokens: number;
21
21
  requestCount: number;
22
+ enabled: boolean;
23
+ isDefault: boolean;
22
24
  }
23
25
  /** A leased credential: the decrypted secret plus the row id (for usage attribution). */
24
26
  export interface LeasedSubscriptionToken {
@@ -50,6 +52,16 @@ export declare class ProviderSubscriptionService {
50
52
  * those through the per-user PersonalSubscriptionService instead.
51
53
  */
52
54
  hasToken(workspaceId: string, vendor: SubscriptionVendor): Promise<boolean>;
55
+ /**
56
+ * Enable/disable and/or (un)pin the default of a pool token. Both flags are optional;
57
+ * pinning a default clears any prior default of the same vendor, and un-pinning clears
58
+ * it only when THIS token was the default (so toggling an unrelated token off never
59
+ * disturbs the group's default). Returns the updated metadata.
60
+ */
61
+ updateToken(workspaceId: string, id: string, patch: {
62
+ enabled?: boolean;
63
+ isDefault?: boolean;
64
+ }): Promise<VendorCredentialSummary>;
53
65
  /** Remove a token from the pool. */
54
66
  removeToken(workspaceId: string, id: string): Promise<void>;
55
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderSubscriptionService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ProviderSubscriptionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAEX,mCAAmC,EACnC,YAAY,EACZ,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAyB9D,MAAM,WAAW,uCAAuC;IACtD,mCAAmC,EAAE,mCAAmC,CAAA;IACxE,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,yFAAyF;AACzF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,kBAAkB,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,2BAA2B;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uCAAuC,EAAI;IAE9E,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAStB,wDAAwD;IAClD,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;QAAE,MAAM,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAClE,OAAO,CAAC,uBAAuB,CAAC,CA+BlC;IAED,sFAAsF;IAChF,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC;IAED;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhF;IAED,oCAAoC;IAC9B,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE;IAED;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAmBlC;IAED,oFAAoF;IAC9E,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC,CAQf;CACF"}
1
+ {"version":3,"file":"ProviderSubscriptionService.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/ProviderSubscriptionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAEX,mCAAmC,EACnC,YAAY,EACZ,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAI5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAyB9D,MAAM,WAAW,uCAAuC;IACtD,mCAAmC,EAAE,mCAAmC,CAAA;IACxE,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,yFAAyF;AACzF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,kBAAkB,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,2BAA2B;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,uCAAuC,EAAI;IAE9E,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAStB,wDAAwD;IAClD,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;QAAE,MAAM,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAClE,OAAO,CAAC,uBAAuB,CAAC,CAiClC;IAED,sFAAsF;IAChF,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC;IAED;;;;OAIG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF;IAED;;;;;OAKG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAChD,OAAO,CAAC,uBAAuB,CAAC,CAgBlC;IAED,oCAAoC;IAC9B,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE;IAED;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAmBlC;IAED,oFAAoF;IAC9E,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC,CAQf;CACF"}
@@ -1,4 +1,4 @@
1
- import { ConflictError } from '@cat-factory/kernel';
1
+ import { ConflictError, NotFoundError } from '@cat-factory/kernel';
2
2
  import { requireWorkspace } from '@cat-factory/kernel';
3
3
  import { SUBSCRIPTION_VENDORS, isIndividualVendor } from '@cat-factory/kernel';
4
4
  import { DEFAULT_USAGE_WINDOW_MS, chooseToken } from './providers.logic.js';
@@ -55,6 +55,8 @@ export class ProviderSubscriptionService {
55
55
  inputTokens: 0,
56
56
  outputTokens: 0,
57
57
  requestCount: 0,
58
+ enabled: true,
59
+ isDefault: false,
58
60
  deletedAt: null,
59
61
  };
60
62
  await this.deps.providerSubscriptionTokenRepository.add(record);
@@ -80,7 +82,33 @@ export class ProviderSubscriptionService {
80
82
  if (isIndividualVendor(vendor))
81
83
  return false;
82
84
  const rows = await this.deps.providerSubscriptionTokenRepository.listByVendor(workspaceId, vendor);
83
- return rows.length > 0;
85
+ // Only ENABLED tokens make a vendor "configured": an all-disabled pool would fail
86
+ // the lease, so it must not report as available to the executor's routing.
87
+ return rows.some((r) => r.enabled);
88
+ }
89
+ /**
90
+ * Enable/disable and/or (un)pin the default of a pool token. Both flags are optional;
91
+ * pinning a default clears any prior default of the same vendor, and un-pinning clears
92
+ * it only when THIS token was the default (so toggling an unrelated token off never
93
+ * disturbs the group's default). Returns the updated metadata.
94
+ */
95
+ async updateToken(workspaceId, id, patch) {
96
+ const repo = this.deps.providerSubscriptionTokenRepository;
97
+ const existing = await repo.getById(workspaceId, id);
98
+ if (!existing) {
99
+ throw new NotFoundError('Subscription token', id);
100
+ }
101
+ if (patch.enabled !== undefined) {
102
+ await repo.setEnabled(workspaceId, id, patch.enabled);
103
+ }
104
+ if (patch.isDefault === true) {
105
+ await repo.setDefault(workspaceId, existing.vendor, id);
106
+ }
107
+ else if (patch.isDefault === false && existing.isDefault) {
108
+ await repo.setDefault(workspaceId, existing.vendor, null);
109
+ }
110
+ const updated = await repo.getById(workspaceId, id);
111
+ return toSummary(updated ?? existing);
84
112
  }
85
113
  /** Remove a token from the pool. */
86
114
  async removeToken(workspaceId, id) {
@@ -125,6 +153,8 @@ function toSummary(record) {
125
153
  inputTokens: record.inputTokens,
126
154
  outputTokens: record.outputTokens,
127
155
  requestCount: record.requestCount,
156
+ enabled: record.enabled,
157
+ isDefault: record.isDefault,
128
158
  };
129
159
  }
130
160
  //# sourceMappingURL=ProviderSubscriptionService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderSubscriptionService.js","sourceRoot":"","sources":["../../../src/modules/providers/ProviderSubscriptionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderSubscriptionService.js","sourceRoot":"","sources":["../../../src/modules/providers/ProviderSubscriptionService.ts"],"names":[],"mappings":"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"}
@@ -9,15 +9,21 @@ export interface PoolRotationRecord {
9
9
  windowStartedAt: number | null;
10
10
  lastUsedAt: number | null;
11
11
  createdAt: number;
12
+ /** A disabled row is never leased. */
13
+ enabled: boolean;
14
+ /** A pinned default (when enabled) is preferred over usage-aware rotation. */
15
+ isDefault: boolean;
12
16
  }
13
17
  /** Default rolling usage window (~5h) — mirrors subscription quota windows. */
14
18
  export declare const DEFAULT_USAGE_WINDOW_MS: number;
15
19
  /** Effective window usage for a row: counters reset once the window ages out. */
16
20
  export declare function windowUsage(record: PoolRotationRecord, now: number, windowMs: number): number;
17
21
  /**
18
- * Choose the next row to lease from a non-empty list of live pool rows.
19
- * Least window usage wins; ties break by least-recently-leased (nulls first =
20
- * never leased), then oldest created. Returns null only for an empty list.
22
+ * Choose the next row to lease from a list of live pool rows. Disabled rows are
23
+ * ignored. A pinned default (an enabled `isDefault` row) wins outright — the oldest
24
+ * one if somehow several are flagged. Otherwise least window usage wins; ties break by
25
+ * least-recently-leased (nulls first = never leased), then oldest created. Returns null
26
+ * when no enabled row exists.
21
27
  */
22
28
  export declare function chooseToken<T extends PoolRotationRecord>(records: T[], now: number, windowMs: number): T | null;
23
29
  //# sourceMappingURL=providers.logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/providers.logic.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAqB,CAAA;AAEzD,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,kBAAkB,EACtD,OAAO,EAAE,CAAC,EAAE,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,CAAC,GAAG,IAAI,CAWV"}
1
+ {"version":3,"file":"providers.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/providers/providers.logic.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAqB,CAAA;AAEzD,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,kBAAkB,EACtD,OAAO,EAAE,CAAC,EAAE,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,CAAC,GAAG,IAAI,CAgBV"}
@@ -1,9 +1,10 @@
1
1
  // Pure rotation logic for usage-aware credential pools (subscription tokens AND
2
2
  // direct-provider API keys), kept separate from the services so it can be
3
- // unit-tested without a repository. The policy is usage-aware: prefer the row
4
- // that has consumed the fewest tokens in the current rolling window, falling back
5
- // to least-recently-leased (round-robin) and then oldest-created for ties and
6
- // cold-start rows.
3
+ // unit-tested without a repository. Disabled rows are never chosen. A pinned default
4
+ // (an enabled `isDefault` row) always wins; otherwise the policy is usage-aware:
5
+ // prefer the row that has consumed the fewest tokens in the current rolling window,
6
+ // falling back to least-recently-leased (round-robin) and then oldest-created for ties
7
+ // and cold-start rows.
7
8
  /** Default rolling usage window (~5h) — mirrors subscription quota windows. */
8
9
  export const DEFAULT_USAGE_WINDOW_MS = 5 * 60 * 60 * 1000;
9
10
  /** Effective window usage for a row: counters reset once the window ages out. */
@@ -13,14 +14,21 @@ export function windowUsage(record, now, windowMs) {
13
14
  return record.inputTokens + record.outputTokens;
14
15
  }
15
16
  /**
16
- * Choose the next row to lease from a non-empty list of live pool rows.
17
- * Least window usage wins; ties break by least-recently-leased (nulls first =
18
- * never leased), then oldest created. Returns null only for an empty list.
17
+ * Choose the next row to lease from a list of live pool rows. Disabled rows are
18
+ * ignored. A pinned default (an enabled `isDefault` row) wins outright — the oldest
19
+ * one if somehow several are flagged. Otherwise least window usage wins; ties break by
20
+ * least-recently-leased (nulls first = never leased), then oldest created. Returns null
21
+ * when no enabled row exists.
19
22
  */
20
23
  export function chooseToken(records, now, windowMs) {
24
+ const enabled = records.filter((r) => r.enabled);
25
+ const defaults = enabled.filter((r) => r.isDefault);
26
+ if (defaults.length > 0) {
27
+ return defaults.reduce((a, b) => (a.createdAt <= b.createdAt ? a : b));
28
+ }
21
29
  let best = null;
22
30
  let bestUsage = Number.POSITIVE_INFINITY;
23
- for (const record of records) {
31
+ for (const record of enabled) {
24
32
  const usage = windowUsage(record, now, windowMs);
25
33
  if (best === null || usage < bestUsage || (usage === bestUsage && isFresher(record, best))) {
26
34
  best = record;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.logic.js","sourceRoot":"","sources":["../../../src/modules/providers/providers.logic.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,kFAAkF;AAClF,8EAA8E;AAC9E,mBAAmB;AAenB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzD,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,MAA0B,EAAE,GAAW,EAAE,QAAgB;IACnF,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,eAAe,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAA;IACxF,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAA;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,OAAY,EACZ,GAAW,EACX,QAAgB;IAEhB,IAAI,IAAI,GAAa,IAAI,CAAA;IACzB,IAAI,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;QAChD,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3F,IAAI,GAAG,MAAM,CAAA;YACb,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,6EAA6E;AAC7E,2DAA2D;AAC3D,SAAS,SAAS,CAAC,SAA6B,EAAE,OAA2B;IAC3E,MAAM,CAAC,GAAG,SAAS,CAAC,UAAU,CAAA;IAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAA;IAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAA;QAC1B,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;QAC3B,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"providers.logic.js","sourceRoot":"","sources":["../../../src/modules/providers/providers.logic.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,qFAAqF;AACrF,iFAAiF;AACjF,oFAAoF;AACpF,uFAAuF;AACvF,uBAAuB;AAmBvB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzD,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,MAA0B,EAAE,GAAW,EAAE,QAAgB;IACnF,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,eAAe,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAA;IACxF,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,OAAY,EACZ,GAAW,EACX,QAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,IAAI,GAAa,IAAI,CAAA;IACzB,IAAI,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;QAChD,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3F,IAAI,GAAG,MAAM,CAAA;YACb,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,6EAA6E;AAC7E,2DAA2D;AAC3D,SAAS,SAAS,CAAC,SAA6B,EAAE,OAA2B;IAC3E,MAAM,CAAC,GAAG,SAAS,CAAC,UAAU,CAAA;IAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAA;IAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAA;QAC1B,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;QAC3B,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/integrations",
3
- "version": "0.90.0",
3
+ "version": "0.91.0",
4
4
  "description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,15 +27,15 @@
27
27
  "ai": "^6.0.230",
28
28
  "p-map": "^7.0.5",
29
29
  "yaml": "^2.9.0",
30
- "@cat-factory/contracts": "0.157.0",
31
- "@cat-factory/kernel": "0.151.0"
30
+ "@cat-factory/contracts": "0.158.0",
31
+ "@cat-factory/kernel": "0.152.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "typescript": "7.0.2",
35
35
  "undici": "^8.7.0",
36
36
  "valibot": "^1.4.2",
37
37
  "vitest": "^4.1.10",
38
- "@cat-factory/caching": "0.10.30"
38
+ "@cat-factory/caching": "0.10.31"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b tsconfig.build.json",