@goplus/agentguard 1.0.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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -0
  3. package/dist/action/detectors/exec.d.ts +21 -0
  4. package/dist/action/detectors/exec.d.ts.map +1 -0
  5. package/dist/action/detectors/exec.js +201 -0
  6. package/dist/action/detectors/exec.js.map +1 -0
  7. package/dist/action/detectors/index.d.ts +4 -0
  8. package/dist/action/detectors/index.d.ts.map +1 -0
  9. package/dist/action/detectors/index.js +20 -0
  10. package/dist/action/detectors/index.js.map +1 -0
  11. package/dist/action/detectors/network.d.ts +21 -0
  12. package/dist/action/detectors/network.d.ts.map +1 -0
  13. package/dist/action/detectors/network.js +152 -0
  14. package/dist/action/detectors/network.js.map +1 -0
  15. package/dist/action/detectors/secret-leak.d.ts +28 -0
  16. package/dist/action/detectors/secret-leak.d.ts.map +1 -0
  17. package/dist/action/detectors/secret-leak.js +94 -0
  18. package/dist/action/detectors/secret-leak.js.map +1 -0
  19. package/dist/action/goplus/client.d.ts +151 -0
  20. package/dist/action/goplus/client.d.ts.map +1 -0
  21. package/dist/action/goplus/client.js +187 -0
  22. package/dist/action/goplus/client.js.map +1 -0
  23. package/dist/action/index.d.ts +61 -0
  24. package/dist/action/index.d.ts.map +1 -0
  25. package/dist/action/index.js +643 -0
  26. package/dist/action/index.js.map +1 -0
  27. package/dist/index.d.ts +31 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +77 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mcp-server.d.ts +3 -0
  32. package/dist/mcp-server.d.ts.map +1 -0
  33. package/dist/mcp-server.js +410 -0
  34. package/dist/mcp-server.js.map +1 -0
  35. package/dist/policy/default.d.ts +77 -0
  36. package/dist/policy/default.d.ts.map +1 -0
  37. package/dist/policy/default.js +94 -0
  38. package/dist/policy/default.js.map +1 -0
  39. package/dist/registry/index.d.ts +93 -0
  40. package/dist/registry/index.d.ts.map +1 -0
  41. package/dist/registry/index.js +280 -0
  42. package/dist/registry/index.js.map +1 -0
  43. package/dist/registry/storage.d.ts +69 -0
  44. package/dist/registry/storage.d.ts.map +1 -0
  45. package/dist/registry/storage.js +208 -0
  46. package/dist/registry/storage.js.map +1 -0
  47. package/dist/registry/trust.d.ts +41 -0
  48. package/dist/registry/trust.d.ts.map +1 -0
  49. package/dist/registry/trust.js +139 -0
  50. package/dist/registry/trust.js.map +1 -0
  51. package/dist/scanner/file-walker.d.ts +34 -0
  52. package/dist/scanner/file-walker.d.ts.map +1 -0
  53. package/dist/scanner/file-walker.js +134 -0
  54. package/dist/scanner/file-walker.js.map +1 -0
  55. package/dist/scanner/index.d.ts +67 -0
  56. package/dist/scanner/index.d.ts.map +1 -0
  57. package/dist/scanner/index.js +349 -0
  58. package/dist/scanner/index.js.map +1 -0
  59. package/dist/scanner/rules/exfiltration.d.ts +6 -0
  60. package/dist/scanner/rules/exfiltration.d.ts.map +1 -0
  61. package/dist/scanner/rules/exfiltration.js +48 -0
  62. package/dist/scanner/rules/exfiltration.js.map +1 -0
  63. package/dist/scanner/rules/index.d.ts +18 -0
  64. package/dist/scanner/rules/index.d.ts.map +1 -0
  65. package/dist/scanner/rules/index.js +54 -0
  66. package/dist/scanner/rules/index.js.map +1 -0
  67. package/dist/scanner/rules/obfuscation.d.ts +6 -0
  68. package/dist/scanner/rules/obfuscation.d.ts.map +1 -0
  69. package/dist/scanner/rules/obfuscation.js +37 -0
  70. package/dist/scanner/rules/obfuscation.js.map +1 -0
  71. package/dist/scanner/rules/prompt-injection.d.ts +6 -0
  72. package/dist/scanner/rules/prompt-injection.d.ts.map +1 -0
  73. package/dist/scanner/rules/prompt-injection.js +38 -0
  74. package/dist/scanner/rules/prompt-injection.js.map +1 -0
  75. package/dist/scanner/rules/remote-loader.d.ts +6 -0
  76. package/dist/scanner/rules/remote-loader.d.ts.map +1 -0
  77. package/dist/scanner/rules/remote-loader.js +31 -0
  78. package/dist/scanner/rules/remote-loader.js.map +1 -0
  79. package/dist/scanner/rules/secrets.d.ts +6 -0
  80. package/dist/scanner/rules/secrets.d.ts.map +1 -0
  81. package/dist/scanner/rules/secrets.js +68 -0
  82. package/dist/scanner/rules/secrets.js.map +1 -0
  83. package/dist/scanner/rules/shell-exec.d.ts +6 -0
  84. package/dist/scanner/rules/shell-exec.d.ts.map +1 -0
  85. package/dist/scanner/rules/shell-exec.js +52 -0
  86. package/dist/scanner/rules/shell-exec.js.map +1 -0
  87. package/dist/scanner/rules/web3.d.ts +6 -0
  88. package/dist/scanner/rules/web3.d.ts.map +1 -0
  89. package/dist/scanner/rules/web3.js +139 -0
  90. package/dist/scanner/rules/web3.js.map +1 -0
  91. package/dist/tests/action.test.d.ts +2 -0
  92. package/dist/tests/action.test.d.ts.map +1 -0
  93. package/dist/tests/action.test.js +127 -0
  94. package/dist/tests/action.test.js.map +1 -0
  95. package/dist/tests/registry.test.d.ts +2 -0
  96. package/dist/tests/registry.test.d.ts.map +1 -0
  97. package/dist/tests/registry.test.js +109 -0
  98. package/dist/tests/registry.test.js.map +1 -0
  99. package/dist/tests/scanner.test.d.ts +2 -0
  100. package/dist/tests/scanner.test.d.ts.map +1 -0
  101. package/dist/tests/scanner.test.js +57 -0
  102. package/dist/tests/scanner.test.js.map +1 -0
  103. package/dist/types/action.d.ts +198 -0
  104. package/dist/types/action.d.ts.map +1 -0
  105. package/dist/types/action.js +3 -0
  106. package/dist/types/action.js.map +1 -0
  107. package/dist/types/index.d.ts +5 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +22 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/registry.d.ts +104 -0
  112. package/dist/types/registry.d.ts.map +1 -0
  113. package/dist/types/registry.js +21 -0
  114. package/dist/types/registry.js.map +1 -0
  115. package/dist/types/scanner.d.ts +88 -0
  116. package/dist/types/scanner.d.ts.map +1 -0
  117. package/dist/types/scanner.js +20 -0
  118. package/dist/types/scanner.js.map +1 -0
  119. package/dist/types/skill.d.ts +52 -0
  120. package/dist/types/skill.d.ts.map +1 -0
  121. package/dist/types/skill.js +33 -0
  122. package/dist/types/skill.js.map +1 -0
  123. package/dist/utils/hash.d.ts +21 -0
  124. package/dist/utils/hash.d.ts.map +1 -0
  125. package/dist/utils/hash.js +112 -0
  126. package/dist/utils/hash.js.map +1 -0
  127. package/dist/utils/patterns.d.ts +74 -0
  128. package/dist/utils/patterns.d.ts.map +1 -0
  129. package/dist/utils/patterns.js +157 -0
  130. package/dist/utils/patterns.js.map +1 -0
  131. package/package.json +60 -0
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CAPABILITY_PRESETS = exports.PERMISSIVE_CAPABILITY = exports.RESTRICTIVE_CAPABILITY = exports.DEFAULT_POLICIES = void 0;
4
+ /**
5
+ * Default policies - most restrictive
6
+ */
7
+ exports.DEFAULT_POLICIES = {
8
+ // Private key and mnemonic exfiltration is always blocked
9
+ secret_exfil: {
10
+ private_key: 'deny',
11
+ mnemonic: 'deny',
12
+ api_secret: 'confirm',
13
+ },
14
+ // Command execution is denied by default
15
+ exec_command: 'deny',
16
+ // Web3 transactions
17
+ web3: {
18
+ unlimited_approval: 'confirm',
19
+ unknown_spender: 'confirm',
20
+ user_not_present: 'confirm',
21
+ },
22
+ // Network requests
23
+ network: {
24
+ untrusted_domain: 'confirm',
25
+ body_contains_secret: 'deny',
26
+ },
27
+ };
28
+ /**
29
+ * Restrictive capability model
30
+ */
31
+ exports.RESTRICTIVE_CAPABILITY = {
32
+ network_allowlist: [],
33
+ filesystem_allowlist: [],
34
+ exec: 'deny',
35
+ secrets_allowlist: [],
36
+ };
37
+ /**
38
+ * Permissive capability model (for trusted skills)
39
+ */
40
+ exports.PERMISSIVE_CAPABILITY = {
41
+ network_allowlist: ['*'],
42
+ filesystem_allowlist: ['./**'],
43
+ exec: 'allow',
44
+ secrets_allowlist: ['*'],
45
+ web3: {
46
+ chains_allowlist: [1, 56, 137, 42161, 10, 8453], // Major chains
47
+ rpc_allowlist: ['*'],
48
+ tx_policy: 'allow',
49
+ },
50
+ };
51
+ /**
52
+ * Common capability presets
53
+ */
54
+ exports.CAPABILITY_PRESETS = {
55
+ /** No capabilities */
56
+ none: exports.RESTRICTIVE_CAPABILITY,
57
+ /** Read-only local access */
58
+ read_only: {
59
+ ...exports.RESTRICTIVE_CAPABILITY,
60
+ filesystem_allowlist: ['./**'],
61
+ },
62
+ /** Trading bot preset */
63
+ trading_bot: {
64
+ network_allowlist: [
65
+ 'api.binance.com',
66
+ 'api.bybit.com',
67
+ 'api.okx.com',
68
+ 'api.coinbase.com',
69
+ '*.dextools.io',
70
+ '*.coingecko.com',
71
+ ],
72
+ filesystem_allowlist: ['./config/**', './logs/**'],
73
+ exec: 'deny',
74
+ secrets_allowlist: ['*_API_KEY', '*_API_SECRET'],
75
+ web3: {
76
+ chains_allowlist: [1, 56, 137, 42161],
77
+ rpc_allowlist: ['*'],
78
+ tx_policy: 'confirm_high_risk',
79
+ },
80
+ },
81
+ /** DeFi interaction preset */
82
+ defi: {
83
+ network_allowlist: ['*'],
84
+ filesystem_allowlist: [],
85
+ exec: 'deny',
86
+ secrets_allowlist: [],
87
+ web3: {
88
+ chains_allowlist: [1, 56, 137, 42161, 10, 8453, 43114],
89
+ rpc_allowlist: ['*'],
90
+ tx_policy: 'confirm_high_risk',
91
+ },
92
+ },
93
+ };
94
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/policy/default.ts"],"names":[],"mappings":";;;AA2BA;;GAEG;AACU,QAAA,gBAAgB,GAAiB;IAC5C,0DAA0D;IAC1D,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,SAAS;KACtB;IAED,yCAAyC;IACzC,YAAY,EAAE,MAAM;IAEpB,oBAAoB;IACpB,IAAI,EAAE;QACJ,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,SAAS;KAC5B;IAED,mBAAmB;IACnB,OAAO,EAAE;QACP,gBAAgB,EAAE,SAAS;QAC3B,oBAAoB,EAAE,MAAM;KAC7B;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,sBAAsB,GAAoB;IACrD,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,MAAM;IACZ,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAoB;IACpD,iBAAiB,EAAE,CAAC,GAAG,CAAC;IACxB,oBAAoB,EAAE,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,OAAO;IACb,iBAAiB,EAAE,CAAC,GAAG,CAAC;IACxB,IAAI,EAAE;QACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,eAAe;QAChE,aAAa,EAAE,CAAC,GAAG,CAAC;QACpB,SAAS,EAAE,OAAO;KACnB;CACF,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAG;IAChC,sBAAsB;IACtB,IAAI,EAAE,8BAAsB;IAE5B,6BAA6B;IAC7B,SAAS,EAAE;QACT,GAAG,8BAAsB;QACzB,oBAAoB,EAAE,CAAC,MAAM,CAAC;KAC/B;IAED,yBAAyB;IACzB,WAAW,EAAE;QACX,iBAAiB,EAAE;YACjB,iBAAiB;YACjB,eAAe;YACf,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,iBAAiB;SAClB;QACD,oBAAoB,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;QAClD,IAAI,EAAE,MAAe;QACrB,iBAAiB,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;QAChD,IAAI,EAAE;YACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;YACrC,aAAa,EAAE,CAAC,GAAG,CAAC;YACpB,SAAS,EAAE,mBAA4B;SACxC;KACF;IAED,8BAA8B;IAC9B,IAAI,EAAE;QACJ,iBAAiB,EAAE,CAAC,GAAG,CAAC;QACxB,oBAAoB,EAAE,EAAE;QACxB,IAAI,EAAE,MAAe;QACrB,iBAAiB,EAAE,EAAE;QACrB,IAAI,EAAE;YACJ,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;YACtD,aAAa,EAAE,CAAC,GAAG,CAAC;YACpB,SAAS,EAAE,mBAA4B;SACxC;KACF;CACF,CAAC"}
@@ -0,0 +1,93 @@
1
+ import type { TrustRecord, TrustLevel, AttestRequest, RevokeMatch, ListFilters } from '../types/registry.js';
2
+ import type { SkillIdentity, CapabilityModel } from '../types/skill.js';
3
+ import { type StorageOptions } from './storage.js';
4
+ /**
5
+ * Registry options
6
+ */
7
+ export interface RegistryOptions extends StorageOptions {
8
+ /** Auto-downgrade on hash/version change */
9
+ autoDowngrade?: boolean;
10
+ /** Require confirmation for trust upgrades */
11
+ requireConfirmForUpgrade?: boolean;
12
+ }
13
+ /**
14
+ * Lookup result
15
+ */
16
+ export interface LookupResult {
17
+ /** Found record (if any) */
18
+ record: TrustRecord | null;
19
+ /** Effective trust level (considering expiry, hash changes) */
20
+ effective_trust_level: TrustLevel;
21
+ /** Effective capabilities */
22
+ effective_capabilities: CapabilityModel;
23
+ /** Reason if trust was modified */
24
+ modification_reason?: string;
25
+ }
26
+ /**
27
+ * Attest result
28
+ */
29
+ export interface AttestResult {
30
+ /** Success */
31
+ success: boolean;
32
+ /** Record key */
33
+ record_key: string;
34
+ /** Requires confirmation */
35
+ requires_confirmation: boolean;
36
+ /** Confirmation reasons */
37
+ confirmation_reasons?: string[];
38
+ /** Created or updated */
39
+ action: 'created' | 'updated';
40
+ }
41
+ /**
42
+ * Skill Registry - Module B
43
+ * Manages trusted/restricted/untrusted skill records
44
+ */
45
+ export declare class SkillRegistry {
46
+ private storage;
47
+ private options;
48
+ constructor(options?: RegistryOptions);
49
+ /**
50
+ * Look up a skill's trust record
51
+ */
52
+ lookup(skill: SkillIdentity): Promise<LookupResult>;
53
+ /**
54
+ * Attest (add/update) a trust record
55
+ */
56
+ attest(request: AttestRequest): Promise<AttestResult>;
57
+ /**
58
+ * Force attest (skip confirmation)
59
+ */
60
+ forceAttest(request: AttestRequest): Promise<AttestResult>;
61
+ /**
62
+ * Revoke trust records
63
+ */
64
+ revoke(match: RevokeMatch, reason: string): Promise<number>;
65
+ /**
66
+ * List trust records
67
+ */
68
+ list(filters?: ListFilters): Promise<TrustRecord[]>;
69
+ /**
70
+ * Get a single record by key
71
+ */
72
+ get(recordKey: string): Promise<TrustRecord | null>;
73
+ /**
74
+ * Delete a record (hard delete)
75
+ */
76
+ delete(recordKey: string): Promise<boolean>;
77
+ /**
78
+ * Export registry
79
+ */
80
+ export(): Promise<string>;
81
+ /**
82
+ * Import registry
83
+ */
84
+ import(jsonData: string, merge?: boolean): Promise<void>;
85
+ /**
86
+ * Clear all records
87
+ */
88
+ clear(): Promise<void>;
89
+ }
90
+ export declare const registry: SkillRegistry;
91
+ export * from './storage.js';
92
+ export * from './trust.js';
93
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAQpE;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,qBAAqB,EAAE,UAAU,CAAC;IAClC,6BAA6B;IAC7B,sBAAsB,EAAE,eAAe,CAAC;IACxC,mCAAmC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yBAAyB;IACzB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,GAAE,eAAoB;IASzC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8EzD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqE3D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgDjE;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgCzD;;OAEG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIzD;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAGD,eAAO,MAAM,QAAQ,eAAsB,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.registry = exports.SkillRegistry = void 0;
18
+ const skill_js_1 = require("../types/skill.js");
19
+ const registry_js_1 = require("../types/registry.js");
20
+ const storage_js_1 = require("./storage.js");
21
+ const trust_js_1 = require("./trust.js");
22
+ /**
23
+ * Skill Registry - Module B
24
+ * Manages trusted/restricted/untrusted skill records
25
+ */
26
+ class SkillRegistry {
27
+ storage;
28
+ options;
29
+ constructor(options = {}) {
30
+ this.options = {
31
+ autoDowngrade: true,
32
+ requireConfirmForUpgrade: true,
33
+ ...options,
34
+ };
35
+ this.storage = new storage_js_1.RegistryStorage(options);
36
+ }
37
+ /**
38
+ * Look up a skill's trust record
39
+ */
40
+ async lookup(skill) {
41
+ const recordKey = (0, skill_js_1.generateRecordKey)(skill);
42
+ // Try exact match first
43
+ let record = await this.storage.findByKey(recordKey);
44
+ // If not found, check for records with same source but different hash/version
45
+ if (!record) {
46
+ const sourceRecords = await this.storage.findBySource(skill.source);
47
+ // Find best matching record
48
+ for (const r of sourceRecords) {
49
+ if (r.skill.version_ref === skill.version_ref) {
50
+ record = r;
51
+ break;
52
+ }
53
+ }
54
+ // If still not found, use any record from same source
55
+ if (!record && sourceRecords.length > 0) {
56
+ record = sourceRecords[0];
57
+ }
58
+ }
59
+ // No record found - return untrusted
60
+ if (!record) {
61
+ return {
62
+ record: null,
63
+ effective_trust_level: 'untrusted',
64
+ effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
65
+ };
66
+ }
67
+ // Check if record matches exactly
68
+ const exactMatch = (0, registry_js_1.skillMatchesRecord)(skill, record);
69
+ // Check expiry
70
+ if ((0, registry_js_1.isRecordExpired)(record)) {
71
+ return {
72
+ record,
73
+ effective_trust_level: 'untrusted',
74
+ effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
75
+ modification_reason: 'record_expired',
76
+ };
77
+ }
78
+ // Check for hash/version changes
79
+ if (!exactMatch && this.options.autoDowngrade) {
80
+ const evaluation = (0, trust_js_1.needsReevaluation)(record, skill);
81
+ if (evaluation.needsReevaluation) {
82
+ return {
83
+ record,
84
+ effective_trust_level: 'untrusted',
85
+ effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
86
+ modification_reason: evaluation.reason,
87
+ };
88
+ }
89
+ }
90
+ // Check if revoked
91
+ if (record.status === 'revoked') {
92
+ return {
93
+ record,
94
+ effective_trust_level: 'untrusted',
95
+ effective_capabilities: skill_js_1.DEFAULT_CAPABILITY,
96
+ modification_reason: 'record_revoked',
97
+ };
98
+ }
99
+ // Return the record's trust level and capabilities
100
+ return {
101
+ record,
102
+ effective_trust_level: record.trust_level,
103
+ effective_capabilities: record.capabilities,
104
+ };
105
+ }
106
+ /**
107
+ * Attest (add/update) a trust record
108
+ */
109
+ async attest(request) {
110
+ const { skill, trust_level, capabilities, expires_at, review } = request;
111
+ const recordKey = (0, skill_js_1.generateRecordKey)(skill);
112
+ // Check for existing record
113
+ const existingRecord = await this.storage.findByKey(recordKey);
114
+ let requiresConfirmation = false;
115
+ const confirmationReasons = [];
116
+ if (existingRecord) {
117
+ // Check for trust upgrade
118
+ if (this.options.requireConfirmForUpgrade &&
119
+ (0, trust_js_1.isTrustUpgrade)(existingRecord.trust_level, trust_level)) {
120
+ requiresConfirmation = true;
121
+ confirmationReasons.push(`Trust upgrade: ${existingRecord.trust_level} -> ${trust_level}`);
122
+ }
123
+ // Check for capability escalation
124
+ const escalation = (0, trust_js_1.isCapabilityEscalation)(existingRecord.capabilities, capabilities);
125
+ if (escalation.isEscalation && this.options.requireConfirmForUpgrade) {
126
+ requiresConfirmation = true;
127
+ confirmationReasons.push(...escalation.escalations);
128
+ }
129
+ }
130
+ // Create new record
131
+ const newRecord = (0, trust_js_1.createTrustRecord)(skill, trust_level, capabilities, {
132
+ reviewed_by: review.reviewed_by,
133
+ evidence_refs: review.evidence_refs,
134
+ notes: review.notes,
135
+ }, expires_at);
136
+ // If confirmation is required, return without saving
137
+ if (requiresConfirmation) {
138
+ return {
139
+ success: false,
140
+ record_key: recordKey,
141
+ requires_confirmation: true,
142
+ confirmation_reasons: confirmationReasons,
143
+ action: existingRecord ? 'updated' : 'created',
144
+ };
145
+ }
146
+ // Save the record
147
+ await this.storage.upsert(newRecord);
148
+ return {
149
+ success: true,
150
+ record_key: recordKey,
151
+ requires_confirmation: false,
152
+ action: existingRecord ? 'updated' : 'created',
153
+ };
154
+ }
155
+ /**
156
+ * Force attest (skip confirmation)
157
+ */
158
+ async forceAttest(request) {
159
+ const { skill, trust_level, capabilities, expires_at, review } = request;
160
+ const recordKey = (0, skill_js_1.generateRecordKey)(skill);
161
+ const existingRecord = await this.storage.findByKey(recordKey);
162
+ const newRecord = (0, trust_js_1.createTrustRecord)(skill, trust_level, capabilities, {
163
+ reviewed_by: review.reviewed_by,
164
+ evidence_refs: review.evidence_refs,
165
+ notes: review.notes,
166
+ }, expires_at);
167
+ await this.storage.upsert(newRecord);
168
+ return {
169
+ success: true,
170
+ record_key: recordKey,
171
+ requires_confirmation: false,
172
+ action: existingRecord ? 'updated' : 'created',
173
+ };
174
+ }
175
+ /**
176
+ * Revoke trust records
177
+ */
178
+ async revoke(match, reason) {
179
+ let revokedCount = 0;
180
+ const records = await this.storage.getRecords();
181
+ for (const record of records) {
182
+ let shouldRevoke = false;
183
+ // Match by record_key
184
+ if (match.record_key && record.record_key === match.record_key) {
185
+ shouldRevoke = true;
186
+ }
187
+ // Match by source
188
+ if (match.source) {
189
+ if (match.source.includes('*')) {
190
+ // Wildcard match
191
+ const pattern = new RegExp(`^${match.source.replace(/\*/g, '.*')}$`);
192
+ if (pattern.test(record.skill.source)) {
193
+ shouldRevoke = true;
194
+ }
195
+ }
196
+ else if (record.skill.source === match.source) {
197
+ shouldRevoke = true;
198
+ }
199
+ }
200
+ // Match by version
201
+ if (match.version_ref && record.skill.version_ref === match.version_ref) {
202
+ // Only revoke if source also matches (or not specified)
203
+ if (!match.source || shouldRevoke) {
204
+ shouldRevoke = true;
205
+ }
206
+ }
207
+ if (shouldRevoke && record.status !== 'revoked') {
208
+ record.status = 'revoked';
209
+ record.updated_at = new Date().toISOString();
210
+ record.review.notes += `\n[REVOKED] ${reason}`;
211
+ await this.storage.upsert(record);
212
+ revokedCount++;
213
+ }
214
+ }
215
+ return revokedCount;
216
+ }
217
+ /**
218
+ * List trust records
219
+ */
220
+ async list(filters) {
221
+ let records = await this.storage.getRecords();
222
+ if (filters) {
223
+ // Filter by trust level
224
+ if (filters.trust_level) {
225
+ records = records.filter((r) => r.trust_level === filters.trust_level);
226
+ }
227
+ // Filter by status
228
+ if (filters.status) {
229
+ records = records.filter((r) => r.status === filters.status);
230
+ }
231
+ // Filter by source pattern
232
+ if (filters.source_pattern) {
233
+ const pattern = new RegExp(filters.source_pattern.replace(/\*/g, '.*'), 'i');
234
+ records = records.filter((r) => pattern.test(r.skill.source));
235
+ }
236
+ // Filter expired
237
+ if (!filters.include_expired) {
238
+ records = records.filter((r) => !(0, registry_js_1.isRecordExpired)(r));
239
+ }
240
+ }
241
+ return records;
242
+ }
243
+ /**
244
+ * Get a single record by key
245
+ */
246
+ async get(recordKey) {
247
+ return this.storage.findByKey(recordKey);
248
+ }
249
+ /**
250
+ * Delete a record (hard delete)
251
+ */
252
+ async delete(recordKey) {
253
+ return this.storage.remove(recordKey);
254
+ }
255
+ /**
256
+ * Export registry
257
+ */
258
+ async export() {
259
+ return this.storage.export();
260
+ }
261
+ /**
262
+ * Import registry
263
+ */
264
+ async import(jsonData, merge = false) {
265
+ return this.storage.import(jsonData, merge);
266
+ }
267
+ /**
268
+ * Clear all records
269
+ */
270
+ async clear() {
271
+ return this.storage.clear();
272
+ }
273
+ }
274
+ exports.SkillRegistry = SkillRegistry;
275
+ // Export singleton instance
276
+ exports.registry = new SkillRegistry();
277
+ // Re-export types
278
+ __exportStar(require("./storage.js"), exports);
279
+ __exportStar(require("./trust.js"), exports);
280
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,gDAA0E;AAC1E,sDAA2E;AAC3E,6CAAoE;AACpE,yCAKoB;AA0CpB;;;GAGG;AACH,MAAa,aAAa;IAChB,OAAO,CAAkB;IACzB,OAAO,CAAkB;IAEjC,YAAY,UAA2B,EAAE;QACvC,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,IAAI;YACnB,wBAAwB,EAAE,IAAI;YAC9B,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,4BAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAoB;QAC/B,MAAM,SAAS,GAAG,IAAA,4BAAiB,EAAC,KAAK,CAAC,CAAC;QAE3C,wBAAwB;QACxB,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAErD,8EAA8E;QAC9E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEpE,4BAA4B;YAC5B,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC9C,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,qBAAqB,EAAE,WAAW;gBAClC,sBAAsB,EAAE,6BAAkB;aAC3C,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,UAAU,GAAG,IAAA,gCAAkB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAErD,eAAe;QACf,IAAI,IAAA,6BAAe,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM;gBACN,qBAAqB,EAAE,WAAW;gBAClC,sBAAsB,EAAE,6BAAkB;gBAC1C,mBAAmB,EAAE,gBAAgB;aACtC,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAA,4BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAEpD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;gBACjC,OAAO;oBACL,MAAM;oBACN,qBAAqB,EAAE,WAAW;oBAClC,sBAAsB,EAAE,6BAAkB;oBAC1C,mBAAmB,EAAE,UAAU,CAAC,MAAM;iBACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM;gBACN,qBAAqB,EAAE,WAAW;gBAClC,sBAAsB,EAAE,6BAAkB;gBAC1C,mBAAmB,EAAE,gBAAgB;aACtC,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,OAAO;YACL,MAAM;YACN,qBAAqB,EAAE,MAAM,CAAC,WAAW;YACzC,sBAAsB,EAAE,MAAM,CAAC,YAAY;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACzE,MAAM,SAAS,GAAG,IAAA,4BAAiB,EAAC,KAAK,CAAC,CAAC;QAE3C,4BAA4B;QAC5B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,MAAM,mBAAmB,GAAa,EAAE,CAAC;QAEzC,IAAI,cAAc,EAAE,CAAC;YACnB,0BAA0B;YAC1B,IACE,IAAI,CAAC,OAAO,CAAC,wBAAwB;gBACrC,IAAA,yBAAc,EAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,EACvD,CAAC;gBACD,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,mBAAmB,CAAC,IAAI,CACtB,kBAAkB,cAAc,CAAC,WAAW,OAAO,WAAW,EAAE,CACjE,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,MAAM,UAAU,GAAG,IAAA,iCAAsB,EACvC,cAAc,CAAC,YAAY,EAC3B,YAAY,CACb,CAAC;YAEF,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;gBACrE,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,mBAAmB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,IAAA,4BAAiB,EACjC,KAAK,EACL,WAAW,EACX,YAAY,EACZ;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,EACD,UAAU,CACX,CAAC;QAEF,qDAAqD;QACrD,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,SAAS;gBACrB,qBAAqB,EAAE,IAAI;gBAC3B,oBAAoB,EAAE,mBAAmB;gBACzC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aAC/C,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS;YACrB,qBAAqB,EAAE,KAAK;YAC5B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACzE,MAAM,SAAS,GAAG,IAAA,4BAAiB,EAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,IAAA,4BAAiB,EACjC,KAAK,EACL,WAAW,EACX,YAAY,EACZ;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,EACD,UAAU,CACX,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS;YACrB,qBAAqB,EAAE,KAAK;YAC5B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAkB,EAAE,MAAc;QAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEhD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,YAAY,GAAG,KAAK,CAAC;YAEzB,sBAAsB;YACtB,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC/D,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,kBAAkB;YAClB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,iBAAiB;oBACjB,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CACzC,CAAC;oBACF,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;wBACtC,YAAY,GAAG,IAAI,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBAChD,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;gBACxE,wDAAwD;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;oBAClC,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,MAAM,EAAE,CAAC;gBAE/C,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAE9C,IAAI,OAAO,EAAE,CAAC;YACZ,wBAAwB;YACxB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;YACzE,CAAC;YAED,mBAAmB;YACnB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/D,CAAC;YAED,2BAA2B;YAC3B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,EAC3C,GAAG,CACJ,CAAC;gBACF,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,iBAAiB;YACjB,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC7B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAA,6BAAe,EAAC,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,QAAiB,KAAK;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF;AA7TD,sCA6TC;AAED,4BAA4B;AACf,QAAA,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;AAE5C,kBAAkB;AAClB,+CAA6B;AAC7B,6CAA2B"}
@@ -0,0 +1,69 @@
1
+ import type { RegistryData, TrustRecord } from '../types/registry.js';
2
+ /**
3
+ * Storage options
4
+ */
5
+ export interface StorageOptions {
6
+ /** Path to registry file */
7
+ filePath?: string;
8
+ }
9
+ /**
10
+ * JSON-based storage for registry
11
+ */
12
+ export declare class RegistryStorage {
13
+ private filePath;
14
+ private data;
15
+ constructor(options?: StorageOptions);
16
+ /**
17
+ * Ensure data directory exists
18
+ */
19
+ private ensureDirectory;
20
+ /**
21
+ * Load registry data from file
22
+ */
23
+ load(): Promise<RegistryData>;
24
+ /**
25
+ * Save registry data to file
26
+ */
27
+ save(): Promise<void>;
28
+ /**
29
+ * Get all records
30
+ */
31
+ getRecords(): Promise<TrustRecord[]>;
32
+ /**
33
+ * Find record by key
34
+ */
35
+ findByKey(recordKey: string): Promise<TrustRecord | null>;
36
+ /**
37
+ * Find records by source
38
+ */
39
+ findBySource(source: string): Promise<TrustRecord[]>;
40
+ /**
41
+ * Add or update a record
42
+ */
43
+ upsert(record: TrustRecord): Promise<void>;
44
+ /**
45
+ * Remove a record by key
46
+ */
47
+ remove(recordKey: string): Promise<boolean>;
48
+ /**
49
+ * Update record status
50
+ */
51
+ updateStatus(recordKey: string, status: 'active' | 'revoked'): Promise<boolean>;
52
+ /**
53
+ * Export registry to JSON string
54
+ */
55
+ export(): Promise<string>;
56
+ /**
57
+ * Import registry from JSON string
58
+ */
59
+ import(jsonData: string, merge?: boolean): Promise<void>;
60
+ /**
61
+ * Clear all records
62
+ */
63
+ clear(): Promise<void>;
64
+ /**
65
+ * Get registry file path
66
+ */
67
+ getFilePath(): string;
68
+ }
69
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/registry/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAWtE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAA6B;gBAE7B,OAAO,GAAE,cAAmB;IAMxC;;OAEG;YACW,eAAe;IAK7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IA0BnC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAK1C;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK/D;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK1D;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhD;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcjD;;OAEG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAC3B,OAAO,CAAC,OAAO,CAAC;IAcnB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAK/B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}