@skillsmith/core 0.11.4 → 0.11.5
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/CHANGELOG.md +13 -0
- package/README.md +10 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +15 -5
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/client.private-registry.d.ts +80 -0
- package/dist/src/api/client.private-registry.d.ts.map +1 -0
- package/dist/src/api/client.private-registry.js +97 -0
- package/dist/src/api/client.private-registry.js.map +1 -0
- package/dist/src/api/client.private-registry.test.d.ts +9 -0
- package/dist/src/api/client.private-registry.test.d.ts.map +1 -0
- package/dist/src/api/client.private-registry.test.js +127 -0
- package/dist/src/api/client.private-registry.test.js.map +1 -0
- package/dist/src/api/client.toSkill.test.d.ts +25 -0
- package/dist/src/api/client.toSkill.test.d.ts.map +1 -0
- package/dist/src/api/client.toSkill.test.js +97 -0
- package/dist/src/api/client.toSkill.test.js.map +1 -0
- package/dist/src/api/client.token-refresh.d.ts +8 -0
- package/dist/src/api/client.token-refresh.d.ts.map +1 -1
- package/dist/src/api/client.token-refresh.js +26 -0
- package/dist/src/api/client.token-refresh.js.map +1 -1
- package/dist/src/api/client.token-refresh.test.js +82 -0
- package/dist/src/api/client.token-refresh.test.js.map +1 -1
- package/dist/src/api/index.d.ts +2 -0
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +9 -0
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/security-summary.d.ts +73 -0
- package/dist/src/api/security-summary.d.ts.map +1 -0
- package/dist/src/api/security-summary.js +88 -0
- package/dist/src/api/security-summary.js.map +1 -0
- package/dist/src/api/security-summary.test.d.ts +9 -0
- package/dist/src/api/security-summary.test.d.ts.map +1 -0
- package/dist/src/api/security-summary.test.js +94 -0
- package/dist/src/api/security-summary.test.js.map +1 -0
- package/dist/src/config/config-atomic-write.d.ts +30 -10
- package/dist/src/config/config-atomic-write.d.ts.map +1 -1
- package/dist/src/config/config-atomic-write.js +33 -80
- package/dist/src/config/config-atomic-write.js.map +1 -1
- package/dist/src/config/config-atomic-write.test.d.ts +8 -0
- package/dist/src/config/config-atomic-write.test.d.ts.map +1 -1
- package/dist/src/config/config-atomic-write.test.js +64 -12
- package/dist/src/config/config-atomic-write.test.js.map +1 -1
- package/dist/src/config/owned-lock.acquire.d.ts +53 -0
- package/dist/src/config/owned-lock.acquire.d.ts.map +1 -0
- package/dist/src/config/owned-lock.acquire.js +140 -0
- package/dist/src/config/owned-lock.acquire.js.map +1 -0
- package/dist/src/config/owned-lock.claim.d.ts +84 -0
- package/dist/src/config/owned-lock.claim.d.ts.map +1 -0
- package/dist/src/config/owned-lock.claim.js +310 -0
- package/dist/src/config/owned-lock.claim.js.map +1 -0
- package/dist/src/config/owned-lock.d.ts +113 -0
- package/dist/src/config/owned-lock.d.ts.map +1 -0
- package/dist/src/config/owned-lock.js +121 -0
- package/dist/src/config/owned-lock.js.map +1 -0
- package/dist/src/config/owned-lock.test.d.ts +12 -0
- package/dist/src/config/owned-lock.test.d.ts.map +1 -0
- package/dist/src/config/owned-lock.test.js +412 -0
- package/dist/src/config/owned-lock.test.js.map +1 -0
- package/dist/src/config/owned-lock.types.d.ts +78 -0
- package/dist/src/config/owned-lock.types.d.ts.map +1 -0
- package/dist/src/config/owned-lock.types.js +30 -0
- package/dist/src/config/owned-lock.types.js.map +1 -0
- package/dist/src/db/createDatabase.d.ts.map +1 -1
- package/dist/src/db/createDatabase.js +19 -7
- package/dist/src/db/createDatabase.js.map +1 -1
- package/dist/src/embeddings/hnsw-store.exports.d.ts +11 -0
- package/dist/src/embeddings/hnsw-store.exports.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.exports.js +10 -0
- package/dist/src/embeddings/hnsw-store.exports.js.map +1 -0
- package/dist/src/embeddings/index.d.ts +1 -2
- package/dist/src/embeddings/index.d.ts.map +1 -1
- package/dist/src/embeddings/index.js +17 -3
- package/dist/src/embeddings/index.js.map +1 -1
- package/dist/src/embeddings/probe.d.ts.map +1 -1
- package/dist/src/embeddings/probe.js +4 -8
- package/dist/src/embeddings/probe.js.map +1 -1
- package/dist/src/exports/services.d.ts +4 -1
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +22 -0
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/index.d.ts +1 -1
- package/dist/src/install/index.d.ts.map +1 -1
- package/dist/src/install/index.js +1 -1
- package/dist/src/install/index.js.map +1 -1
- package/dist/src/install/paths.d.ts +10 -0
- package/dist/src/install/paths.d.ts.map +1 -1
- package/dist/src/install/paths.js +19 -0
- package/dist/src/install/paths.js.map +1 -1
- package/dist/src/security/scanner/multiline-category-closure.test.d.ts +80 -0
- package/dist/src/security/scanner/multiline-category-closure.test.d.ts.map +1 -0
- package/dist/src/security/scanner/multiline-category-closure.test.js +287 -0
- package/dist/src/security/scanner/multiline-category-closure.test.js.map +1 -0
- package/dist/src/services/recommend-guard.d.ts +28 -0
- package/dist/src/services/recommend-guard.d.ts.map +1 -0
- package/dist/src/services/recommend-guard.js +34 -0
- package/dist/src/services/recommend-guard.js.map +1 -0
- package/dist/src/services/recommend-guard.test.d.ts +2 -0
- package/dist/src/services/recommend-guard.test.d.ts.map +1 -0
- package/dist/src/services/recommend-guard.test.js +28 -0
- package/dist/src/services/recommend-guard.test.js.map +1 -0
- package/dist/src/services/skill-installation.content.d.ts +88 -0
- package/dist/src/services/skill-installation.content.d.ts.map +1 -0
- package/dist/src/services/skill-installation.content.js +319 -0
- package/dist/src/services/skill-installation.content.js.map +1 -0
- package/dist/src/services/skill-installation.helpers.d.ts +32 -1
- package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.js +39 -6
- package/dist/src/services/skill-installation.helpers.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.test.js +34 -2
- package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
- package/dist/src/services/skill-installation.io.d.ts.map +1 -1
- package/dist/src/services/skill-installation.io.js +74 -1
- package/dist/src/services/skill-installation.io.js.map +1 -1
- package/dist/src/services/skill-installation.service.d.ts +20 -1
- package/dist/src/services/skill-installation.service.d.ts.map +1 -1
- package/dist/src/services/skill-installation.service.js +26 -4
- package/dist/src/services/skill-installation.service.js.map +1 -1
- package/dist/src/services/skill-installation.types.d.ts +42 -1
- package/dist/src/services/skill-installation.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.types.js.map +1 -1
- package/dist/src/services/skill-resolution.d.ts +67 -0
- package/dist/src/services/skill-resolution.d.ts.map +1 -0
- package/dist/src/services/skill-resolution.js +67 -0
- package/dist/src/services/skill-resolution.js.map +1 -0
- package/dist/src/services/skill-resolution.test.d.ts +2 -0
- package/dist/src/services/skill-resolution.test.d.ts.map +1 -0
- package/dist/src/services/skill-resolution.test.js +143 -0
- package/dist/src/services/skill-resolution.test.js.map +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +4 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/quiet-mode.d.ts +21 -0
- package/dist/src/utils/quiet-mode.d.ts.map +1 -0
- package/dist/src/utils/quiet-mode.js +26 -0
- package/dist/src/utils/quiet-mode.js.map +1 -0
- package/dist/tests/EmbeddingService.test.js +58 -1
- package/dist/tests/EmbeddingService.test.js.map +1 -1
- package/dist/tests/SecurityScanner.performance.test.js +5 -2
- package/dist/tests/SecurityScanner.performance.test.js.map +1 -1
- package/dist/tests/db/database-abstraction.test.js +45 -1
- package/dist/tests/db/database-abstraction.test.js.map +1 -1
- package/dist/tests/helpers/deterministic-dead-pid.d.ts +13 -0
- package/dist/tests/helpers/deterministic-dead-pid.d.ts.map +1 -0
- package/dist/tests/helpers/deterministic-dead-pid.js +31 -0
- package/dist/tests/helpers/deterministic-dead-pid.js.map +1 -0
- package/dist/tests/integration/owned-lock-lost-update.test.d.ts +12 -0
- package/dist/tests/integration/owned-lock-lost-update.test.d.ts.map +1 -0
- package/dist/tests/integration/owned-lock-lost-update.test.js +52 -0
- package/dist/tests/integration/owned-lock-lost-update.test.js.map +1 -0
- package/dist/tests/integration/owned-lock-reclaim-race.test.d.ts +19 -0
- package/dist/tests/integration/owned-lock-reclaim-race.test.d.ts.map +1 -0
- package/dist/tests/integration/owned-lock-reclaim-race.test.js +177 -0
- package/dist/tests/integration/owned-lock-reclaim-race.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.content.test.d.ts +10 -0
- package/dist/tests/unit/services/skill-installation.content.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.content.test.js +290 -0
- package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.symlink.test.d.ts +8 -0
- package/dist/tests/unit/services/skill-installation.io.symlink.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.io.symlink.test.js +72 -0
- package/dist/tests/unit/services/skill-installation.io.symlink.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.d.ts +15 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.js +190 -0
- package/dist/tests/unit/services/skill-installation.service.error-codes.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.multi-client.test.d.ts +17 -0
- package/dist/tests/unit/services/skill-installation.service.multi-client.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.multi-client.test.js +126 -0
- package/dist/tests/unit/services/skill-installation.service.multi-client.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.test.js +7 -112
- package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
- package/dist/tests/utils/quiet-mode.test.d.ts +12 -0
- package/dist/tests/utils/quiet-mode.test.d.ts.map +1 -0
- package/dist/tests/utils/quiet-mode.test.js +42 -0
- package/dist/tests/utils/quiet-mode.test.js.map +1 -0
- package/package.json +17 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAa1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAa1B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIhG,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAA;AAMrB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,iEAAiE;IACjE,OAAO,CAAC,YAAY,CAA4B;IAChD,qDAAqD;IACrD,OAAO,CAAC,aAAa,CAAwB;gBAEjC,MAAM,GAAE,eAAoB;IAsBxC,gEAAgE;IAChE,gBAAgB,IAAI,QAAQ,GAAG,IAAI;IAInC,SAAS,IAAI,OAAO;IAKpB,iBAAiB,IAAI,OAAO;IAK5B,WAAW,IAAI,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM;IAOxD,6DAA6D;IAC7D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,OAAO,CAAC,GAAG;YAOG,OAAO;IA8Mf,MAAM,CACV,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,gBAAgB,GAC7B,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IA2BpC,QAAQ,CACZ,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB,GACxD,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAclC,kBAAkB,CACtB,OAAO,EAAE,qBAAqB,EAC9B,WAAW,CAAC,EAAE,gBAAgB,GAC7B,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IAwBpC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAMlE,mEAAmE;IAC7D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,uEAAuE;IACvE,mBAAmB,IAAI,IAAI;IAO3B,OAAO,CAAC,kBAAkB;IAYpB,WAAW,IAAI,OAAO,CAAC;QAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;QAC5C,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;IAKF,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,KAAK;CA+B/C;AAMD,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,mBAAmB,CAE7E;AAED,eAAe,mBAAmB,CAAA"}
|
package/dist/src/api/client.js
CHANGED
|
@@ -9,6 +9,7 @@ import { buildClientEventBatcher } from './client.events.js';
|
|
|
9
9
|
import { ApiCache } from './cache.js';
|
|
10
10
|
import { buildResponseCache, withResponseCache } from './client.cache.js';
|
|
11
11
|
import { tryRefreshToken } from './client.token-refresh.js';
|
|
12
|
+
import { deriveSecuritySummaryFromApiSkill } from './security-summary.js';
|
|
12
13
|
// Re-export for backwards compatibility
|
|
13
14
|
export { generateAnonymousId } from './utils.js';
|
|
14
15
|
export { checkApiHealth } from './client.health.js';
|
|
@@ -313,6 +314,15 @@ export class SkillsmithApiClient {
|
|
|
313
314
|
static toSkill(result) {
|
|
314
315
|
// Sentinel value for missing timestamps - clearly indicates unknown date
|
|
315
316
|
const UNKNOWN_DATE = '1970-01-01T00:00:00.000Z';
|
|
317
|
+
// SMI-5897 (C-15): derive real security-status fields via the shared
|
|
318
|
+
// helper instead of hardcoding "not scanned" for every API-sourced
|
|
319
|
+
// skill — this is what made CLI `info`/`search` show "Not scanned" for
|
|
320
|
+
// skills MCP correctly reported as passed (both now derive from the
|
|
321
|
+
// same underlying last_scanned_at/quarantined/security_score fields).
|
|
322
|
+
// `security` is `undefined` when the skill has never been scanned;
|
|
323
|
+
// the flat Skill shape signals that the same way MCP's nested
|
|
324
|
+
// SecuritySummary does — securityPassed: null, securityScannedAt: null.
|
|
325
|
+
const security = deriveSecuritySummaryFromApiSkill(result);
|
|
316
326
|
return {
|
|
317
327
|
id: result.id,
|
|
318
328
|
name: result.name,
|
|
@@ -323,11 +333,11 @@ export class SkillsmithApiClient {
|
|
|
323
333
|
trustTier: result.trust_tier,
|
|
324
334
|
tags: result.tags || [],
|
|
325
335
|
installable: result.installable ?? false,
|
|
326
|
-
// SMI-825: Security scan fields
|
|
327
|
-
riskScore: null,
|
|
328
|
-
securityFindingsCount: 0,
|
|
329
|
-
securityScannedAt: null,
|
|
330
|
-
securityPassed: null,
|
|
336
|
+
// SMI-825: Security scan fields
|
|
337
|
+
riskScore: security?.riskScore ?? null,
|
|
338
|
+
securityFindingsCount: security?.findingsCount ?? 0,
|
|
339
|
+
securityScannedAt: security?.scannedAt ?? null,
|
|
340
|
+
securityPassed: security?.passed ?? null,
|
|
331
341
|
createdAt: result.created_at ?? UNKNOWN_DATE,
|
|
332
342
|
updatedAt: result.updated_at ?? UNKNOWN_DATE,
|
|
333
343
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Private-registry content fetch (SMI-5905 Wave 4).
|
|
3
|
+
* @module @skillsmith/core/api/client.private-registry
|
|
4
|
+
* @see docs/internal/implementation/private-registry-skill-install.md
|
|
5
|
+
* @see supabase/functions/private-registry-get/index.ts (Wave 2 — the transport this calls)
|
|
6
|
+
*
|
|
7
|
+
* The CLI's only path to `private_registry_skills.content` — the CLI never
|
|
8
|
+
* carries Supabase credentials directly, only reaches Supabase-backed data
|
|
9
|
+
* through Edge Functions. Lives in its own file rather than `client.ts`
|
|
10
|
+
* (already 479/500 lines), following the `client.health.ts`/`client.events.ts`
|
|
11
|
+
* companion-module convention already used to split `SkillsmithApiClient`
|
|
12
|
+
* functionality: a standalone function that reuses `buildRequestHeaders()` /
|
|
13
|
+
* `DEFAULT_BASE_URL` / `PRODUCTION_ANON_KEY` from `./utils.js` rather than
|
|
14
|
+
* adding a method onto the class itself.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately does NOT reuse `SkillsmithApiClient.request()`'s retry-on-5xx/
|
|
17
|
+
* 429 loop — this performs exactly one fetch. Retrying an unauthenticated,
|
|
18
|
+
* forbidden, or not-found response would never succeed, and retrying a 429
|
|
19
|
+
* would fight the endpoint's own tighter (30/min, IP-keyed) rate limiter.
|
|
20
|
+
* Every failure surfaces as a typed result for the CLI to render directly.
|
|
21
|
+
*
|
|
22
|
+
* Auth contract (see supabase/functions/private-registry-get/access.ts):
|
|
23
|
+
* the Edge Function 401s on anything but a real end-user JWT — an
|
|
24
|
+
* `sk_live_*`/`sk_test_*` API key and the anon key both fail authentication
|
|
25
|
+
* there. Callers MUST supply a JWT (e.g. via `resolveFreshAccessToken()`)
|
|
26
|
+
* rather than the class's own apiKey/anonKey fallback chain.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Successful `data` shape from `GET /private-registry-get`
|
|
30
|
+
* (supabase/functions/private-registry-get/index.ts's 200 response body).
|
|
31
|
+
*/
|
|
32
|
+
export interface PrivateRegistrySkillContent {
|
|
33
|
+
skill_id: string;
|
|
34
|
+
team_id: string;
|
|
35
|
+
version: string;
|
|
36
|
+
description: string | null;
|
|
37
|
+
content_hash: string | null;
|
|
38
|
+
deprecated: boolean;
|
|
39
|
+
published_at: string;
|
|
40
|
+
/** Packaged skill files, `{ "SKILL.md": "...", ... }`. Never log this. */
|
|
41
|
+
content: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Machine-readable error taxonomy — one per distinct outcome the Edge
|
|
45
|
+
* Function's contract defines (`access.ts`'s `fail()` call sites in `index.ts`).
|
|
46
|
+
*/
|
|
47
|
+
export type PrivateRegistryGetErrorCode = 'invalid_request' | 'unauthenticated' | 'forbidden' | 'not_found' | 'rate_limited' | 'server_error' | 'network_error';
|
|
48
|
+
export type PrivateRegistryGetResult = {
|
|
49
|
+
ok: true;
|
|
50
|
+
data: PrivateRegistrySkillContent;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
code: PrivateRegistryGetErrorCode;
|
|
54
|
+
status: number;
|
|
55
|
+
message: string;
|
|
56
|
+
};
|
|
57
|
+
export interface GetPrivateRegistrySkillContentParams {
|
|
58
|
+
/**
|
|
59
|
+
* Real end-user JWT (e.g. from `resolveFreshAccessToken()`). Required — the
|
|
60
|
+
* endpoint 401s on anything else, including an API key.
|
|
61
|
+
*/
|
|
62
|
+
jwtToken: string;
|
|
63
|
+
/** Registry skill ID, `author/name` format. */
|
|
64
|
+
skillId: string;
|
|
65
|
+
/** Pin a specific published version; omitted = most-recently-published. */
|
|
66
|
+
version?: string;
|
|
67
|
+
baseUrl?: string;
|
|
68
|
+
anonKey?: string;
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Fetch one private-registry skill's packaged content via the
|
|
73
|
+
* `private-registry-get` Edge Function.
|
|
74
|
+
*
|
|
75
|
+
* Response contract (`supabase/functions/private-registry-get/index.ts`):
|
|
76
|
+
* 200 → `{ data: PrivateRegistrySkillContent }`
|
|
77
|
+
* 4xx/5xx → `{ error: string }`
|
|
78
|
+
*/
|
|
79
|
+
export declare function getPrivateRegistrySkillContent(params: GetPrivateRegistrySkillContentParams): Promise<PrivateRegistryGetResult>;
|
|
80
|
+
//# sourceMappingURL=client.private-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.private-registry.d.ts","sourceRoot":"","sources":["../../../src/api/client.private-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GACnC,iBAAiB,GACjB,iBAAiB,GACjB,WAAW,GACX,WAAW,GACX,cAAc,GACd,cAAc,GACd,eAAe,CAAA;AAEnB,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAErF,MAAM,WAAW,oCAAoC;IACnD;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAqBD;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,oCAAoC,GAC3C,OAAO,CAAC,wBAAwB,CAAC,CAkDnC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Private-registry content fetch (SMI-5905 Wave 4).
|
|
3
|
+
* @module @skillsmith/core/api/client.private-registry
|
|
4
|
+
* @see docs/internal/implementation/private-registry-skill-install.md
|
|
5
|
+
* @see supabase/functions/private-registry-get/index.ts (Wave 2 — the transport this calls)
|
|
6
|
+
*
|
|
7
|
+
* The CLI's only path to `private_registry_skills.content` — the CLI never
|
|
8
|
+
* carries Supabase credentials directly, only reaches Supabase-backed data
|
|
9
|
+
* through Edge Functions. Lives in its own file rather than `client.ts`
|
|
10
|
+
* (already 479/500 lines), following the `client.health.ts`/`client.events.ts`
|
|
11
|
+
* companion-module convention already used to split `SkillsmithApiClient`
|
|
12
|
+
* functionality: a standalone function that reuses `buildRequestHeaders()` /
|
|
13
|
+
* `DEFAULT_BASE_URL` / `PRODUCTION_ANON_KEY` from `./utils.js` rather than
|
|
14
|
+
* adding a method onto the class itself.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately does NOT reuse `SkillsmithApiClient.request()`'s retry-on-5xx/
|
|
17
|
+
* 429 loop — this performs exactly one fetch. Retrying an unauthenticated,
|
|
18
|
+
* forbidden, or not-found response would never succeed, and retrying a 429
|
|
19
|
+
* would fight the endpoint's own tighter (30/min, IP-keyed) rate limiter.
|
|
20
|
+
* Every failure surfaces as a typed result for the CLI to render directly.
|
|
21
|
+
*
|
|
22
|
+
* Auth contract (see supabase/functions/private-registry-get/access.ts):
|
|
23
|
+
* the Edge Function 401s on anything but a real end-user JWT — an
|
|
24
|
+
* `sk_live_*`/`sk_test_*` API key and the anon key both fail authentication
|
|
25
|
+
* there. Callers MUST supply a JWT (e.g. via `resolveFreshAccessToken()`)
|
|
26
|
+
* rather than the class's own apiKey/anonKey fallback chain.
|
|
27
|
+
*/
|
|
28
|
+
import { buildRequestHeaders, DEFAULT_BASE_URL, PRODUCTION_ANON_KEY } from './utils.js';
|
|
29
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
30
|
+
function codeForStatus(status) {
|
|
31
|
+
switch (status) {
|
|
32
|
+
case 400:
|
|
33
|
+
return 'invalid_request';
|
|
34
|
+
case 401:
|
|
35
|
+
return 'unauthenticated';
|
|
36
|
+
case 403:
|
|
37
|
+
return 'forbidden';
|
|
38
|
+
case 404:
|
|
39
|
+
return 'not_found';
|
|
40
|
+
case 429:
|
|
41
|
+
return 'rate_limited';
|
|
42
|
+
default:
|
|
43
|
+
return 'server_error';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Fetch one private-registry skill's packaged content via the
|
|
48
|
+
* `private-registry-get` Edge Function.
|
|
49
|
+
*
|
|
50
|
+
* Response contract (`supabase/functions/private-registry-get/index.ts`):
|
|
51
|
+
* 200 → `{ data: PrivateRegistrySkillContent }`
|
|
52
|
+
* 4xx/5xx → `{ error: string }`
|
|
53
|
+
*/
|
|
54
|
+
export async function getPrivateRegistrySkillContent(params) {
|
|
55
|
+
const baseUrl = params.baseUrl ?? DEFAULT_BASE_URL;
|
|
56
|
+
const anonKey = params.anonKey ?? PRODUCTION_ANON_KEY;
|
|
57
|
+
const timeoutMs = params.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
58
|
+
const query = new URLSearchParams({ skillId: params.skillId });
|
|
59
|
+
if (params.version)
|
|
60
|
+
query.set('version', params.version);
|
|
61
|
+
const controller = new AbortController();
|
|
62
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
63
|
+
let response;
|
|
64
|
+
try {
|
|
65
|
+
response = await fetch(`${baseUrl}/private-registry-get?${query.toString()}`, {
|
|
66
|
+
method: 'GET',
|
|
67
|
+
headers: {
|
|
68
|
+
...buildRequestHeaders(anonKey),
|
|
69
|
+
// Deliberately NOT the class's auth-mode priority chain (JWT > API
|
|
70
|
+
// key > anon key) — this endpoint requires a real user JWT, always.
|
|
71
|
+
Authorization: `Bearer ${params.jwtToken}`,
|
|
72
|
+
},
|
|
73
|
+
signal: controller.signal,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
return { ok: false, code: 'network_error', status: 0, message };
|
|
80
|
+
}
|
|
81
|
+
clearTimeout(timer);
|
|
82
|
+
const body = (await response.json().catch(() => null));
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
const message = body?.error ?? `private-registry-get failed with status ${response.status}`;
|
|
85
|
+
return { ok: false, code: codeForStatus(response.status), status: response.status, message };
|
|
86
|
+
}
|
|
87
|
+
if (!body?.data) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
code: 'network_error',
|
|
91
|
+
status: response.status,
|
|
92
|
+
message: 'private-registry-get returned an unexpected response shape',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return { ok: true, data: body.data };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=client.private-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.private-registry.js","sourceRoot":"","sources":["../../../src/api/client.private-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAkDvF,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAEjC,SAAS,aAAa,CAAC,MAAc;IACnC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAA;QAC1B,KAAK,GAAG;YACN,OAAO,iBAAiB,CAAA;QAC1B,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,cAAc,CAAA;QACvB;YACE,OAAO,cAAc,CAAA;IACzB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAA4C;IAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAA;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAA;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAA;IAExD,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAExD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;IAE7D,IAAI,QAAkB,CAAA;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,yBAAyB,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5E,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBAC/B,mEAAmE;gBACnE,oEAAoE;gBACpE,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,EAAE;aAC3C;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;IACjE,CAAC;IACD,YAAY,CAAC,KAAK,CAAC,CAAA;IAEnB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAG7C,CAAA;IAER,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,EAAE,KAAK,IAAI,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAA;QAC3F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;IAC9F,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,4DAA4D;SACtE,CAAA;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5905 Wave 4: getPrivateRegistrySkillContent() tests.
|
|
3
|
+
*
|
|
4
|
+
* Verifies the request shape (JWT-only Authorization, query params) and the
|
|
5
|
+
* response-contract mapping to a typed result, against the response shape
|
|
6
|
+
* documented in supabase/functions/private-registry-get/index.ts.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=client.private-registry.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.private-registry.test.d.ts","sourceRoot":"","sources":["../../../src/api/client.private-registry.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5905 Wave 4: getPrivateRegistrySkillContent() tests.
|
|
3
|
+
*
|
|
4
|
+
* Verifies the request shape (JWT-only Authorization, query params) and the
|
|
5
|
+
* response-contract mapping to a typed result, against the response shape
|
|
6
|
+
* documented in supabase/functions/private-registry-get/index.ts.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import { getPrivateRegistrySkillContent } from './client.private-registry.js';
|
|
10
|
+
const ORIGINAL_FETCH = globalThis.fetch;
|
|
11
|
+
const SUCCESS_DATA = {
|
|
12
|
+
skill_id: 'my-team/internal-helper',
|
|
13
|
+
team_id: 'team-123',
|
|
14
|
+
version: '1.2.0',
|
|
15
|
+
description: 'An internal helper skill',
|
|
16
|
+
content_hash: 'abc123',
|
|
17
|
+
deprecated: false,
|
|
18
|
+
published_at: '2026-07-01T00:00:00.000Z',
|
|
19
|
+
content: { 'SKILL.md': '---\nname: internal-helper\n---\nBody content.' },
|
|
20
|
+
};
|
|
21
|
+
function jsonResponse(body, status) {
|
|
22
|
+
return new Response(JSON.stringify(body), {
|
|
23
|
+
status,
|
|
24
|
+
headers: { 'Content-Type': 'application/json' },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
describe('SMI-5905: getPrivateRegistrySkillContent()', () => {
|
|
28
|
+
let fetchMock;
|
|
29
|
+
let capturedUrl;
|
|
30
|
+
let capturedInit;
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
capturedUrl = '';
|
|
33
|
+
capturedInit = undefined;
|
|
34
|
+
fetchMock = vi.fn((url, init) => {
|
|
35
|
+
capturedUrl = url;
|
|
36
|
+
capturedInit = init;
|
|
37
|
+
return Promise.resolve(jsonResponse({ data: SUCCESS_DATA }, 200));
|
|
38
|
+
});
|
|
39
|
+
globalThis.fetch = fetchMock;
|
|
40
|
+
});
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
globalThis.fetch = ORIGINAL_FETCH;
|
|
43
|
+
vi.clearAllMocks();
|
|
44
|
+
});
|
|
45
|
+
it('sends the skillId as a query param and the JWT as Authorization: Bearer', async () => {
|
|
46
|
+
await getPrivateRegistrySkillContent({
|
|
47
|
+
jwtToken: 'user-jwt-abc',
|
|
48
|
+
skillId: 'my-team/internal-helper',
|
|
49
|
+
});
|
|
50
|
+
expect(capturedUrl).toContain('/private-registry-get?');
|
|
51
|
+
expect(capturedUrl).toContain('skillId=my-team%2Finternal-helper');
|
|
52
|
+
expect(capturedUrl).not.toContain('version=');
|
|
53
|
+
const headers = capturedInit?.headers;
|
|
54
|
+
expect(headers['Authorization']).toBe('Bearer user-jwt-abc');
|
|
55
|
+
});
|
|
56
|
+
it('forwards an explicit --version as a query param', async () => {
|
|
57
|
+
await getPrivateRegistrySkillContent({
|
|
58
|
+
jwtToken: 'user-jwt-abc',
|
|
59
|
+
skillId: 'my-team/internal-helper',
|
|
60
|
+
version: '1.0.0',
|
|
61
|
+
});
|
|
62
|
+
expect(capturedUrl).toContain('version=1.0.0');
|
|
63
|
+
});
|
|
64
|
+
it('never sends an X-API-Key header — only the JWT bearer', async () => {
|
|
65
|
+
await getPrivateRegistrySkillContent({
|
|
66
|
+
jwtToken: 'user-jwt-abc',
|
|
67
|
+
skillId: 'my-team/internal-helper',
|
|
68
|
+
});
|
|
69
|
+
const headers = capturedInit?.headers;
|
|
70
|
+
expect(headers['X-API-Key']).toBeUndefined();
|
|
71
|
+
});
|
|
72
|
+
it('returns ok:true with the parsed data on 200', async () => {
|
|
73
|
+
const result = await getPrivateRegistrySkillContent({
|
|
74
|
+
jwtToken: 'user-jwt-abc',
|
|
75
|
+
skillId: 'my-team/internal-helper',
|
|
76
|
+
});
|
|
77
|
+
expect(result.ok).toBe(true);
|
|
78
|
+
if (result.ok) {
|
|
79
|
+
expect(result.data).toEqual(SUCCESS_DATA);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it.each([
|
|
83
|
+
[400, 'invalid_request'],
|
|
84
|
+
[401, 'unauthenticated'],
|
|
85
|
+
[403, 'forbidden'],
|
|
86
|
+
[404, 'not_found'],
|
|
87
|
+
[429, 'rate_limited'],
|
|
88
|
+
[500, 'server_error'],
|
|
89
|
+
[405, 'server_error'],
|
|
90
|
+
])('maps HTTP %i to error code %s', async (status, expectedCode) => {
|
|
91
|
+
fetchMock.mockResolvedValueOnce(jsonResponse({ error: `boom ${status}` }, status));
|
|
92
|
+
const result = await getPrivateRegistrySkillContent({
|
|
93
|
+
jwtToken: 'user-jwt-abc',
|
|
94
|
+
skillId: 'my-team/internal-helper',
|
|
95
|
+
});
|
|
96
|
+
expect(result.ok).toBe(false);
|
|
97
|
+
if (!result.ok) {
|
|
98
|
+
expect(result.code).toBe(expectedCode);
|
|
99
|
+
expect(result.status).toBe(status);
|
|
100
|
+
expect(result.message).toContain(`boom ${status}`);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
it('returns network_error when fetch itself throws', async () => {
|
|
104
|
+
fetchMock.mockRejectedValueOnce(new Error('ECONNREFUSED'));
|
|
105
|
+
const result = await getPrivateRegistrySkillContent({
|
|
106
|
+
jwtToken: 'user-jwt-abc',
|
|
107
|
+
skillId: 'my-team/internal-helper',
|
|
108
|
+
});
|
|
109
|
+
expect(result.ok).toBe(false);
|
|
110
|
+
if (!result.ok) {
|
|
111
|
+
expect(result.code).toBe('network_error');
|
|
112
|
+
expect(result.message).toContain('ECONNREFUSED');
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
it('returns network_error on a 200 with an unexpected response shape', async () => {
|
|
116
|
+
fetchMock.mockResolvedValueOnce(jsonResponse({ unexpected: true }, 200));
|
|
117
|
+
const result = await getPrivateRegistrySkillContent({
|
|
118
|
+
jwtToken: 'user-jwt-abc',
|
|
119
|
+
skillId: 'my-team/internal-helper',
|
|
120
|
+
});
|
|
121
|
+
expect(result.ok).toBe(false);
|
|
122
|
+
if (!result.ok) {
|
|
123
|
+
expect(result.code).toBe('network_error');
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=client.private-registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.private-registry.test.js","sourceRoot":"","sources":["../../../src/api/client.private-registry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5897 (C-15): Unit coverage for `SkillsmithApiClient.toSkill()`'s
|
|
3
|
+
* security-status field derivation.
|
|
4
|
+
*
|
|
5
|
+
* Previously `toSkill()` hardcoded `riskScore: null, securityFindingsCount: 0,
|
|
6
|
+
* securityScannedAt: null, securityPassed: null` for every API-sourced skill,
|
|
7
|
+
* discarding the real `security_score`/`quarantined`/`last_scanned_at`/
|
|
8
|
+
* `security_findings` fields already present on the `ApiSearchResult` it
|
|
9
|
+
* received — this is why CLI `info`/`search` (which both route through
|
|
10
|
+
* `toSkill()`) could show "Not scanned" for a skill MCP correctly reported
|
|
11
|
+
* as passed. `toSkill()` now derives these fields via the same shared
|
|
12
|
+
* `deriveSecuritySummaryFromApiSkill()` MCP's tools use, so the two surfaces
|
|
13
|
+
* can't re-diverge (see `api/security-summary.test.ts` for derivation-logic
|
|
14
|
+
* coverage — this file only asserts `toSkill()` wires it through correctly).
|
|
15
|
+
*
|
|
16
|
+
* SMI-5897 (Wave 4 fix): imports `ApiSearchResult` from `./client.types.js` —
|
|
17
|
+
* `toSkill()`'s ACTUAL parameter type — not `./types.js`, which declares a
|
|
18
|
+
* different, same-named type (a pre-existing naming collision elsewhere in
|
|
19
|
+
* this codebase, not something fixed globally here). Importing the wrong
|
|
20
|
+
* type, combined with the `as ApiSearchResult` cast this fix also removes,
|
|
21
|
+
* meant the fixture below was never actually type-checked against
|
|
22
|
+
* `toSkill()`'s real input contract.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=client.toSkill.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.toSkill.test.d.ts","sourceRoot":"","sources":["../../../src/api/client.toSkill.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-5897 (C-15): Unit coverage for `SkillsmithApiClient.toSkill()`'s
|
|
3
|
+
* security-status field derivation.
|
|
4
|
+
*
|
|
5
|
+
* Previously `toSkill()` hardcoded `riskScore: null, securityFindingsCount: 0,
|
|
6
|
+
* securityScannedAt: null, securityPassed: null` for every API-sourced skill,
|
|
7
|
+
* discarding the real `security_score`/`quarantined`/`last_scanned_at`/
|
|
8
|
+
* `security_findings` fields already present on the `ApiSearchResult` it
|
|
9
|
+
* received — this is why CLI `info`/`search` (which both route through
|
|
10
|
+
* `toSkill()`) could show "Not scanned" for a skill MCP correctly reported
|
|
11
|
+
* as passed. `toSkill()` now derives these fields via the same shared
|
|
12
|
+
* `deriveSecuritySummaryFromApiSkill()` MCP's tools use, so the two surfaces
|
|
13
|
+
* can't re-diverge (see `api/security-summary.test.ts` for derivation-logic
|
|
14
|
+
* coverage — this file only asserts `toSkill()` wires it through correctly).
|
|
15
|
+
*
|
|
16
|
+
* SMI-5897 (Wave 4 fix): imports `ApiSearchResult` from `./client.types.js` —
|
|
17
|
+
* `toSkill()`'s ACTUAL parameter type — not `./types.js`, which declares a
|
|
18
|
+
* different, same-named type (a pre-existing naming collision elsewhere in
|
|
19
|
+
* this codebase, not something fixed globally here). Importing the wrong
|
|
20
|
+
* type, combined with the `as ApiSearchResult` cast this fix also removes,
|
|
21
|
+
* meant the fixture below was never actually type-checked against
|
|
22
|
+
* `toSkill()`'s real input contract.
|
|
23
|
+
*/
|
|
24
|
+
import { describe, it, expect } from 'vitest';
|
|
25
|
+
import { SkillsmithApiClient } from './client.js';
|
|
26
|
+
function makeApiSearchResult(overrides = {}) {
|
|
27
|
+
return {
|
|
28
|
+
id: 'skill-1',
|
|
29
|
+
name: 'commit',
|
|
30
|
+
description: 'A commit skill',
|
|
31
|
+
author: 'anthropic',
|
|
32
|
+
repo_url: 'https://github.com/anthropic/commit',
|
|
33
|
+
quality_score: 90,
|
|
34
|
+
trust_tier: 'verified',
|
|
35
|
+
tags: ['git'],
|
|
36
|
+
stars: 10,
|
|
37
|
+
created_at: '2026-01-01T00:00:00.000Z',
|
|
38
|
+
updated_at: '2026-01-02T00:00:00.000Z',
|
|
39
|
+
installable: true,
|
|
40
|
+
...overrides,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
describe('SkillsmithApiClient.toSkill() — security field derivation (SMI-5897 C-15)', () => {
|
|
44
|
+
it('reports "not scanned" (all-null security fields) when last_scanned_at is null', () => {
|
|
45
|
+
const result = makeApiSearchResult({
|
|
46
|
+
last_scanned_at: null,
|
|
47
|
+
quarantined: false,
|
|
48
|
+
security_score: null,
|
|
49
|
+
security_findings: null,
|
|
50
|
+
});
|
|
51
|
+
const skill = SkillsmithApiClient.toSkill(result);
|
|
52
|
+
expect(skill.securityScannedAt).toBeNull();
|
|
53
|
+
expect(skill.securityPassed).toBeNull();
|
|
54
|
+
expect(skill.riskScore).toBeNull();
|
|
55
|
+
expect(skill.securityFindingsCount).toBe(0);
|
|
56
|
+
});
|
|
57
|
+
it('reports a real passing scan status instead of a hardcoded "not scanned"', () => {
|
|
58
|
+
const result = makeApiSearchResult({
|
|
59
|
+
last_scanned_at: '2026-06-01T00:00:00.000Z',
|
|
60
|
+
quarantined: false,
|
|
61
|
+
security_score: 0,
|
|
62
|
+
security_findings: [],
|
|
63
|
+
});
|
|
64
|
+
const skill = SkillsmithApiClient.toSkill(result);
|
|
65
|
+
// Pre-fix this was unconditionally { securityPassed: null, ... } —
|
|
66
|
+
// the exact CLI/MCP status-mismatch bug (C-15).
|
|
67
|
+
expect(skill.securityPassed).toBe(true);
|
|
68
|
+
expect(skill.securityScannedAt).toBe('2026-06-01T00:00:00.000Z');
|
|
69
|
+
expect(skill.riskScore).toBe(0);
|
|
70
|
+
expect(skill.securityFindingsCount).toBe(0);
|
|
71
|
+
});
|
|
72
|
+
it('reports a failing scan status (quarantined) instead of a hardcoded "not scanned"', () => {
|
|
73
|
+
const result = makeApiSearchResult({
|
|
74
|
+
last_scanned_at: '2026-06-01T00:00:00.000Z',
|
|
75
|
+
quarantined: true,
|
|
76
|
+
security_score: 10,
|
|
77
|
+
security_findings: [{ rule: 'a' }, { rule: 'b' }],
|
|
78
|
+
});
|
|
79
|
+
const skill = SkillsmithApiClient.toSkill(result);
|
|
80
|
+
expect(skill.securityPassed).toBe(false);
|
|
81
|
+
expect(skill.securityFindingsCount).toBe(2);
|
|
82
|
+
expect(skill.riskScore).toBe(10);
|
|
83
|
+
});
|
|
84
|
+
it('preserves riskScore: null (never fabricates 0) for a scanned-but-unscored skill', () => {
|
|
85
|
+
const result = makeApiSearchResult({
|
|
86
|
+
last_scanned_at: '2026-06-01T00:00:00.000Z',
|
|
87
|
+
quarantined: false,
|
|
88
|
+
security_score: null,
|
|
89
|
+
security_findings: null,
|
|
90
|
+
});
|
|
91
|
+
const skill = SkillsmithApiClient.toSkill(result);
|
|
92
|
+
expect(skill.securityPassed).toBeNull();
|
|
93
|
+
expect(skill.riskScore).toBeNull();
|
|
94
|
+
expect(skill.securityScannedAt).toBe('2026-06-01T00:00:00.000Z');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=client.toSkill.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.toSkill.test.js","sourceRoot":"","sources":["../../../src/api/client.toSkill.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
export declare function tryRefreshToken(): Promise<string | null>;
|
|
2
2
|
export declare function loadStoredAccessToken(): Promise<string | null>;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the signed-in user's Supabase access token, refreshing it if it has
|
|
5
|
+
* expired (or is within `TOKEN_EXPIRY_SKEW_MS` of expiring).
|
|
6
|
+
*
|
|
7
|
+
* @returns the access token, or null when no credentials are stored on this
|
|
8
|
+
* machine (or the stored refresh token is no longer valid).
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveFreshAccessToken(): Promise<string | null>;
|
|
3
11
|
//# sourceMappingURL=client.token-refresh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.token-refresh.d.ts","sourceRoot":"","sources":["../../../src/api/client.token-refresh.ts"],"names":[],"mappings":"AAOA,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS9D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIpE"}
|
|
1
|
+
{"version":3,"file":"client.token-refresh.d.ts","sourceRoot":"","sources":["../../../src/api/client.token-refresh.ts"],"names":[],"mappings":"AAOA,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS9D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIpE;AAcD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtE"}
|
|
@@ -16,4 +16,30 @@ export async function loadStoredAccessToken() {
|
|
|
16
16
|
return null;
|
|
17
17
|
return creds.accessToken;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* SMI-5905 Wave 1: refresh a token this many ms before its recorded expiry.
|
|
21
|
+
*
|
|
22
|
+
* Extracted from `packages/mcp-server/src/tools/team-resolver.ts`'s
|
|
23
|
+
* `resolveUserAccessToken()` (originally SMI-4292) so a 2nd consumer (the
|
|
24
|
+
* CLI, via a future private-registry command) can resolve "the signed-in
|
|
25
|
+
* user's fresh access token" without depending on mcp-server. team-resolver.ts
|
|
26
|
+
* now delegates to `resolveFreshAccessToken()` below — same skew constant,
|
|
27
|
+
* same refresh-or-null fallback, no behavior change for its existing callers.
|
|
28
|
+
*/
|
|
29
|
+
const TOKEN_EXPIRY_SKEW_MS = 60_000;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the signed-in user's Supabase access token, refreshing it if it has
|
|
32
|
+
* expired (or is within `TOKEN_EXPIRY_SKEW_MS` of expiring).
|
|
33
|
+
*
|
|
34
|
+
* @returns the access token, or null when no credentials are stored on this
|
|
35
|
+
* machine (or the stored refresh token is no longer valid).
|
|
36
|
+
*/
|
|
37
|
+
export async function resolveFreshAccessToken() {
|
|
38
|
+
const creds = await loadCredentials();
|
|
39
|
+
if (!creds)
|
|
40
|
+
return null;
|
|
41
|
+
if (Date.now() < creds.expiresAt - TOKEN_EXPIRY_SKEW_MS)
|
|
42
|
+
return creds.accessToken;
|
|
43
|
+
return tryRefreshToken();
|
|
44
|
+
}
|
|
19
45
|
//# sourceMappingURL=client.token-refresh.js.map
|