@ai-dossier/core 1.0.1

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 (114) hide show
  1. package/dist/checksum.d.ts +15 -0
  2. package/dist/checksum.d.ts.map +1 -0
  3. package/dist/checksum.js +45 -0
  4. package/dist/checksum.js.map +1 -0
  5. package/dist/formatter/formatter.d.ts +3 -0
  6. package/dist/formatter/formatter.d.ts.map +1 -0
  7. package/dist/formatter/formatter.js +120 -0
  8. package/dist/formatter/formatter.js.map +1 -0
  9. package/dist/formatter/index.d.ts +5 -0
  10. package/dist/formatter/index.d.ts.map +1 -0
  11. package/dist/formatter/index.js +32 -0
  12. package/dist/formatter/index.js.map +1 -0
  13. package/dist/formatter/types.d.ts +11 -0
  14. package/dist/formatter/types.d.ts.map +1 -0
  15. package/dist/formatter/types.js +9 -0
  16. package/dist/formatter/types.js.map +1 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +77 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/linter/config.d.ts +4 -0
  22. package/dist/linter/config.d.ts.map +1 -0
  23. package/dist/linter/config.js +42 -0
  24. package/dist/linter/config.js.map +1 -0
  25. package/dist/linter/index.d.ts +8 -0
  26. package/dist/linter/index.d.ts.map +1 -0
  27. package/dist/linter/index.js +69 -0
  28. package/dist/linter/index.js.map +1 -0
  29. package/dist/linter/registry.d.ts +10 -0
  30. package/dist/linter/registry.d.ts.map +1 -0
  31. package/dist/linter/registry.js +37 -0
  32. package/dist/linter/registry.js.map +1 -0
  33. package/dist/linter/rules/checksum-valid.d.ts +3 -0
  34. package/dist/linter/rules/checksum-valid.d.ts.map +1 -0
  35. package/dist/linter/rules/checksum-valid.js +46 -0
  36. package/dist/linter/rules/checksum-valid.js.map +1 -0
  37. package/dist/linter/rules/index.d.ts +11 -0
  38. package/dist/linter/rules/index.d.ts.map +1 -0
  39. package/dist/linter/rules/index.js +27 -0
  40. package/dist/linter/rules/index.js.map +1 -0
  41. package/dist/linter/rules/objective-quality.d.ts +3 -0
  42. package/dist/linter/rules/objective-quality.d.ts.map +1 -0
  43. package/dist/linter/rules/objective-quality.js +44 -0
  44. package/dist/linter/rules/objective-quality.js.map +1 -0
  45. package/dist/linter/rules/required-sections.d.ts +3 -0
  46. package/dist/linter/rules/required-sections.d.ts.map +1 -0
  47. package/dist/linter/rules/required-sections.js +32 -0
  48. package/dist/linter/rules/required-sections.js.map +1 -0
  49. package/dist/linter/rules/risk-level-consistency.d.ts +3 -0
  50. package/dist/linter/rules/risk-level-consistency.d.ts.map +1 -0
  51. package/dist/linter/rules/risk-level-consistency.js +24 -0
  52. package/dist/linter/rules/risk-level-consistency.js.map +1 -0
  53. package/dist/linter/rules/schema-valid.d.ts +3 -0
  54. package/dist/linter/rules/schema-valid.d.ts.map +1 -0
  55. package/dist/linter/rules/schema-valid.js +63 -0
  56. package/dist/linter/rules/schema-valid.js.map +1 -0
  57. package/dist/linter/rules/semver-version.d.ts +3 -0
  58. package/dist/linter/rules/semver-version.d.ts.map +1 -0
  59. package/dist/linter/rules/semver-version.js +34 -0
  60. package/dist/linter/rules/semver-version.js.map +1 -0
  61. package/dist/linter/rules/tools-check-command.d.ts +3 -0
  62. package/dist/linter/rules/tools-check-command.d.ts.map +1 -0
  63. package/dist/linter/rules/tools-check-command.js +27 -0
  64. package/dist/linter/rules/tools-check-command.js.map +1 -0
  65. package/dist/linter/types.d.ts +31 -0
  66. package/dist/linter/types.d.ts.map +1 -0
  67. package/dist/linter/types.js +3 -0
  68. package/dist/linter/types.js.map +1 -0
  69. package/dist/parser.d.ts +18 -0
  70. package/dist/parser.d.ts.map +1 -0
  71. package/dist/parser.js +74 -0
  72. package/dist/parser.js.map +1 -0
  73. package/dist/schema/dossier-schema.json +745 -0
  74. package/dist/signature.d.ts +33 -0
  75. package/dist/signature.d.ts.map +1 -0
  76. package/dist/signature.js +111 -0
  77. package/dist/signature.js.map +1 -0
  78. package/dist/signers/ed25519.d.ts +17 -0
  79. package/dist/signers/ed25519.d.ts.map +1 -0
  80. package/dist/signers/ed25519.js +66 -0
  81. package/dist/signers/ed25519.js.map +1 -0
  82. package/dist/signers/index.d.ts +39 -0
  83. package/dist/signers/index.d.ts.map +1 -0
  84. package/dist/signers/index.js +18 -0
  85. package/dist/signers/index.js.map +1 -0
  86. package/dist/signers/kms.d.ts +20 -0
  87. package/dist/signers/kms.d.ts.map +1 -0
  88. package/dist/signers/kms.js +108 -0
  89. package/dist/signers/kms.js.map +1 -0
  90. package/dist/signers/registry.d.ts +29 -0
  91. package/dist/signers/registry.d.ts.map +1 -0
  92. package/dist/signers/registry.js +67 -0
  93. package/dist/signers/registry.js.map +1 -0
  94. package/dist/types.d.ts +79 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/crypto.d.ts +16 -0
  99. package/dist/utils/crypto.d.ts.map +1 -0
  100. package/dist/utils/crypto.js +25 -0
  101. package/dist/utils/crypto.js.map +1 -0
  102. package/dist/utils/errors.d.ts +18 -0
  103. package/dist/utils/errors.d.ts.map +1 -0
  104. package/dist/utils/errors.js +32 -0
  105. package/dist/utils/errors.js.map +1 -0
  106. package/dist/utils/fs.d.ts +12 -0
  107. package/dist/utils/fs.d.ts.map +1 -0
  108. package/dist/utils/fs.js +24 -0
  109. package/dist/utils/fs.js.map +1 -0
  110. package/dist/utils/verification.d.ts +11 -0
  111. package/dist/utils/verification.d.ts.map +1 -0
  112. package/dist/utils/verification.js +35 -0
  113. package/dist/utils/verification.js.map +1 -0
  114. package/package.json +52 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Dossier Signature Verification
3
+ *
4
+ * This module provides signature verification for dossiers,
5
+ * supporting multiple signature schemes (Ed25519 and AWS KMS).
6
+ */
7
+ import type { SignatureResult } from './signers';
8
+ /**
9
+ * Load trusted keys from file
10
+ * Default location: ~/.dossier/trusted-keys.txt
11
+ * Format: <public-key> <key-id>
12
+ */
13
+ export declare function loadTrustedKeys(filePath?: string): Map<string, string>;
14
+ /**
15
+ * Verify signature using Ed25519
16
+ * @param content - The content to verify
17
+ * @param signature - Base64-encoded signature
18
+ * @param publicKey - PEM-format Ed25519 public key
19
+ */
20
+ export declare function verifyWithEd25519(content: string, signature: string, publicKey: string): boolean;
21
+ /**
22
+ * Verify signature using AWS KMS (ECDSA-SHA-256)
23
+ */
24
+ export declare function verifyWithKms(content: string, signature: string, keyId: string, region?: string): Promise<boolean>;
25
+ /**
26
+ * Verify signature using the registry pattern
27
+ * This is a convenience function that encapsulates registry lookup
28
+ * @param content - The content to verify
29
+ * @param signature - Signature result object containing algorithm and signature data
30
+ * @returns Promise<boolean> - true if signature is valid, false otherwise
31
+ */
32
+ export declare function verifySignature(content: string, signature: SignatureResult): Promise<boolean>;
33
+ //# sourceMappingURL=signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAKjD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA+BtE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAiBhG;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,SAAc,GACnB,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,OAAO,CAAC,CAIlB"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /**
3
+ * Dossier Signature Verification
4
+ *
5
+ * This module provides signature verification for dossiers,
6
+ * supporting multiple signature schemes (Ed25519 and AWS KMS).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.loadTrustedKeys = loadTrustedKeys;
10
+ exports.verifyWithEd25519 = verifyWithEd25519;
11
+ exports.verifyWithKms = verifyWithKms;
12
+ exports.verifySignature = verifySignature;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const node_os_1 = require("node:os");
15
+ const node_path_1 = require("node:path");
16
+ const client_kms_1 = require("@aws-sdk/client-kms");
17
+ const signers_1 = require("./signers");
18
+ const crypto_1 = require("./utils/crypto");
19
+ const fs_1 = require("./utils/fs");
20
+ /**
21
+ * Load trusted keys from file
22
+ * Default location: ~/.dossier/trusted-keys.txt
23
+ * Format: <public-key> <key-id>
24
+ */
25
+ function loadTrustedKeys(filePath) {
26
+ const keysPath = filePath || (0, node_path_1.join)((0, node_os_1.homedir)(), '.dossier', 'trusted-keys.txt');
27
+ const keys = new Map();
28
+ const content = (0, fs_1.readFileIfExists)(keysPath);
29
+ if (!content) {
30
+ return keys;
31
+ }
32
+ try {
33
+ for (const line of content.split('\n')) {
34
+ const trimmed = line.trim();
35
+ // Skip empty lines and comments
36
+ if (!trimmed || trimmed.startsWith('#')) {
37
+ continue;
38
+ }
39
+ // Parse: <public-key> <key-id>
40
+ const parts = trimmed.split(/\s+/);
41
+ if (parts.length >= 2) {
42
+ const publicKey = parts[0];
43
+ const keyId = parts.slice(1).join(' ');
44
+ keys.set(publicKey, keyId);
45
+ }
46
+ }
47
+ }
48
+ catch (_err) {
49
+ // Silently handle errors - consumers can check the returned Map size
50
+ }
51
+ return keys;
52
+ }
53
+ /**
54
+ * Verify signature using Ed25519
55
+ * @param content - The content to verify
56
+ * @param signature - Base64-encoded signature
57
+ * @param publicKey - PEM-format Ed25519 public key
58
+ */
59
+ function verifyWithEd25519(content, signature, publicKey) {
60
+ try {
61
+ const signatureBuffer = Buffer.from(signature, 'base64');
62
+ const contentBuffer = Buffer.from(content, 'utf8');
63
+ // Create public key object from PEM
64
+ const publicKeyObject = (0, node_crypto_1.createPublicKey)({
65
+ key: publicKey,
66
+ format: 'pem',
67
+ type: 'spki',
68
+ });
69
+ // Verify Ed25519 signature (algorithm is null for Ed25519)
70
+ return (0, node_crypto_1.verify)(null, contentBuffer, publicKeyObject, signatureBuffer);
71
+ }
72
+ catch (_err) {
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Verify signature using AWS KMS (ECDSA-SHA-256)
78
+ */
79
+ async function verifyWithKms(content, signature, keyId, region = 'us-east-1') {
80
+ const client = new client_kms_1.KMSClient({ region });
81
+ // Calculate SHA256 digest of content (must match signing process)
82
+ const hash = (0, crypto_1.sha256Hash)(content);
83
+ const signatureBuffer = Buffer.from(signature, 'base64');
84
+ const command = new client_kms_1.VerifyCommand({
85
+ KeyId: keyId,
86
+ Message: hash,
87
+ MessageType: 'DIGEST',
88
+ Signature: signatureBuffer,
89
+ SigningAlgorithm: client_kms_1.SigningAlgorithmSpec.ECDSA_SHA_256,
90
+ });
91
+ try {
92
+ const response = await client.send(command);
93
+ return response.SignatureValid === true;
94
+ }
95
+ catch (_err) {
96
+ return false;
97
+ }
98
+ }
99
+ /**
100
+ * Verify signature using the registry pattern
101
+ * This is a convenience function that encapsulates registry lookup
102
+ * @param content - The content to verify
103
+ * @param signature - Signature result object containing algorithm and signature data
104
+ * @returns Promise<boolean> - true if signature is valid, false otherwise
105
+ */
106
+ async function verifySignature(content, signature) {
107
+ const verifierRegistry = (0, signers_1.getVerifierRegistry)();
108
+ const verifier = verifierRegistry.get(signature.algorithm);
109
+ return await verifier.verify(content, signature);
110
+ }
111
+ //# sourceMappingURL=signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Ed25519 Signer and Verifier using Node.js crypto
3
+ */
4
+ import type { SignatureResult, Signer, Verifier } from './index';
5
+ export declare class Ed25519Signer implements Signer {
6
+ readonly algorithm = "ed25519";
7
+ private privateKey;
8
+ private publicKeyPem;
9
+ constructor(privateKeyPath: string);
10
+ sign(content: string): Promise<SignatureResult>;
11
+ getPublicKey(): Promise<string>;
12
+ }
13
+ export declare class Ed25519Verifier implements Verifier {
14
+ supports(algorithm: string): boolean;
15
+ verify(content: string, signature: SignatureResult): Promise<boolean>;
16
+ }
17
+ //# sourceMappingURL=ed25519.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjE,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,SAAS,aAAa;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAEjB,cAAc,EAAE,MAAM;IAiB5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAY/C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGtC;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;CAkB5E"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * Ed25519 Signer and Verifier using Node.js crypto
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Ed25519Verifier = exports.Ed25519Signer = void 0;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ class Ed25519Signer {
10
+ algorithm = 'ed25519';
11
+ privateKey;
12
+ publicKeyPem;
13
+ constructor(privateKeyPath) {
14
+ // Load private key from PEM file
15
+ const privateKeyPem = (0, node_fs_1.readFileSync)(privateKeyPath, 'utf8');
16
+ this.privateKey = (0, node_crypto_1.createPrivateKey)({
17
+ key: privateKeyPem,
18
+ format: 'pem',
19
+ type: 'pkcs8',
20
+ });
21
+ // Extract public key
22
+ const publicKey = (0, node_crypto_1.createPublicKey)(this.privateKey);
23
+ this.publicKeyPem = publicKey.export({
24
+ type: 'spki',
25
+ format: 'pem',
26
+ });
27
+ }
28
+ async sign(content) {
29
+ const contentBuffer = Buffer.from(content, 'utf8');
30
+ const signatureBuffer = (0, node_crypto_1.sign)(null, contentBuffer, this.privateKey);
31
+ return {
32
+ algorithm: this.algorithm,
33
+ signature: signatureBuffer.toString('base64'),
34
+ public_key: this.publicKeyPem,
35
+ signed_at: new Date().toISOString(),
36
+ };
37
+ }
38
+ async getPublicKey() {
39
+ return this.publicKeyPem;
40
+ }
41
+ }
42
+ exports.Ed25519Signer = Ed25519Signer;
43
+ class Ed25519Verifier {
44
+ supports(algorithm) {
45
+ return algorithm === 'ed25519';
46
+ }
47
+ async verify(content, signature) {
48
+ try {
49
+ const signatureBuffer = Buffer.from(signature.signature, 'base64');
50
+ const contentBuffer = Buffer.from(content, 'utf8');
51
+ // Create public key object from PEM
52
+ const publicKeyObject = (0, node_crypto_1.createPublicKey)({
53
+ key: signature.public_key,
54
+ format: 'pem',
55
+ type: 'spki',
56
+ });
57
+ // Verify Ed25519 signature
58
+ return (0, node_crypto_1.verify)(null, contentBuffer, publicKeyObject, signatureBuffer);
59
+ }
60
+ catch (_err) {
61
+ return false;
62
+ }
63
+ }
64
+ }
65
+ exports.Ed25519Verifier = Ed25519Verifier;
66
+ //# sourceMappingURL=ed25519.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,6CAA8E;AAC9E,qCAAuC;AAGvC,MAAa,aAAa;IACf,SAAS,GAAG,SAAS,CAAC;IACvB,UAAU,CAAY;IACtB,YAAY,CAAS;IAE7B,YAAY,cAAsB;QAChC,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAA,sBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAA,8BAAgB,EAAC;YACjC,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAA,6BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK;SACd,CAAW,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,IAAA,kBAAI,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,YAAY;YAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AArCD,sCAqCC;AAED,MAAa,eAAe;IAC1B,QAAQ,CAAC,SAAiB;QACxB,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAA0B;QACtD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEnD,oCAAoC;YACpC,MAAM,eAAe,GAAG,IAAA,6BAAe,EAAC;gBACtC,GAAG,EAAE,SAAS,CAAC,UAAU;gBACzB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,2BAA2B;YAC3B,OAAO,IAAA,oBAAM,EAAC,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAvBD,0CAuBC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Signer and Verifier interfaces for dossier signatures
3
+ */
4
+ export interface SignatureResult {
5
+ algorithm: string;
6
+ signature: string;
7
+ public_key: string;
8
+ key_id?: string;
9
+ signed_by?: string;
10
+ signed_at: string;
11
+ }
12
+ export interface Signer {
13
+ /**
14
+ * Sign content and return signature metadata
15
+ */
16
+ sign(content: string): Promise<SignatureResult>;
17
+ /**
18
+ * Get the public key in PEM format
19
+ */
20
+ getPublicKey(): Promise<string>;
21
+ /**
22
+ * Algorithm identifier
23
+ */
24
+ readonly algorithm: string;
25
+ }
26
+ export interface Verifier {
27
+ /**
28
+ * Verify a signature
29
+ */
30
+ verify(content: string, signature: SignatureResult): Promise<boolean>;
31
+ /**
32
+ * Check if this verifier supports the given algorithm
33
+ */
34
+ supports(algorithm: string): boolean;
35
+ }
36
+ export { Ed25519Signer, Ed25519Verifier } from './ed25519';
37
+ export { KmsSigner, KmsVerifier } from './kms';
38
+ export { getVerifierRegistry, VerifierRegistry, } from './registry';
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtE;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAGD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Signer and Verifier interfaces for dossier signatures
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VerifierRegistry = exports.getVerifierRegistry = exports.KmsVerifier = exports.KmsSigner = exports.Ed25519Verifier = exports.Ed25519Signer = void 0;
7
+ // Export implementations
8
+ var ed25519_1 = require("./ed25519");
9
+ Object.defineProperty(exports, "Ed25519Signer", { enumerable: true, get: function () { return ed25519_1.Ed25519Signer; } });
10
+ Object.defineProperty(exports, "Ed25519Verifier", { enumerable: true, get: function () { return ed25519_1.Ed25519Verifier; } });
11
+ var kms_1 = require("./kms");
12
+ Object.defineProperty(exports, "KmsSigner", { enumerable: true, get: function () { return kms_1.KmsSigner; } });
13
+ Object.defineProperty(exports, "KmsVerifier", { enumerable: true, get: function () { return kms_1.KmsVerifier; } });
14
+ // Export registry
15
+ var registry_1 = require("./registry");
16
+ Object.defineProperty(exports, "getVerifierRegistry", { enumerable: true, get: function () { return registry_1.getVerifierRegistry; } });
17
+ Object.defineProperty(exports, "VerifierRegistry", { enumerable: true, get: function () { return registry_1.VerifierRegistry; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwCH,yBAAyB;AACzB,qCAA2D;AAAlD,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AACvC,6BAA+C;AAAtC,gGAAA,SAAS,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE/B,kBAAkB;AAClB,uCAGoB;AAFlB,+GAAA,mBAAmB,OAAA;AACnB,4GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AWS KMS Signer and Verifier
3
+ */
4
+ import type { SignatureResult, Signer, Verifier } from './index';
5
+ export declare class KmsSigner implements Signer {
6
+ private keyId;
7
+ readonly algorithm = "ECDSA-SHA-256";
8
+ private client;
9
+ constructor(keyId: string, region?: string);
10
+ sign(content: string): Promise<SignatureResult>;
11
+ getPublicKey(): Promise<string>;
12
+ }
13
+ export declare class KmsVerifier implements Verifier {
14
+ private clients;
15
+ supports(algorithm: string): boolean;
16
+ verify(content: string, signature: SignatureResult): Promise<boolean>;
17
+ private getClient;
18
+ private extractRegionFromArn;
19
+ }
20
+ //# sourceMappingURL=kms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kms.d.ts","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjE,qBAAa,SAAU,YAAW,MAAM;IAKpC,OAAO,CAAC,KAAK;IAJf,QAAQ,CAAC,SAAS,mBAAmB;IACrC,OAAO,CAAC,MAAM,CAAY;gBAGhB,KAAK,EAAE,MAAM,EACrB,MAAM,GAAE,MAAoB;IAKxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyC/C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAYtC;AAED,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,CAAC,OAAO,CAAqC;IAEpD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B3E,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,oBAAoB;CAK7B"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * AWS KMS Signer and Verifier
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KmsVerifier = exports.KmsSigner = void 0;
7
+ const client_kms_1 = require("@aws-sdk/client-kms");
8
+ const crypto_1 = require("../utils/crypto");
9
+ class KmsSigner {
10
+ keyId;
11
+ algorithm = 'ECDSA-SHA-256';
12
+ client;
13
+ constructor(keyId, region = 'us-east-1') {
14
+ this.keyId = keyId;
15
+ this.client = new client_kms_1.KMSClient({ region });
16
+ }
17
+ async sign(content) {
18
+ // Calculate SHA256 digest of content
19
+ const hash = (0, crypto_1.sha256Hash)(content);
20
+ // Sign the digest with KMS
21
+ const signCommand = new client_kms_1.SignCommand({
22
+ KeyId: this.keyId,
23
+ Message: hash,
24
+ MessageType: 'DIGEST',
25
+ SigningAlgorithm: client_kms_1.SigningAlgorithmSpec.ECDSA_SHA_256,
26
+ });
27
+ const signResponse = await this.client.send(signCommand);
28
+ if (!signResponse.Signature) {
29
+ throw new Error('KMS signing failed: no signature returned');
30
+ }
31
+ const signature = Buffer.from(signResponse.Signature).toString('base64');
32
+ // Get public key from KMS
33
+ const pubKeyCommand = new client_kms_1.GetPublicKeyCommand({
34
+ KeyId: this.keyId,
35
+ });
36
+ const pubKeyResponse = await this.client.send(pubKeyCommand);
37
+ if (!pubKeyResponse.PublicKey) {
38
+ throw new Error('KMS failed to return public key');
39
+ }
40
+ const publicKey = Buffer.from(pubKeyResponse.PublicKey).toString('base64');
41
+ const keyArn = pubKeyResponse.KeyId || this.keyId;
42
+ return {
43
+ algorithm: this.algorithm,
44
+ signature,
45
+ public_key: publicKey,
46
+ key_id: keyArn,
47
+ signed_at: new Date().toISOString(),
48
+ };
49
+ }
50
+ async getPublicKey() {
51
+ const command = new client_kms_1.GetPublicKeyCommand({
52
+ KeyId: this.keyId,
53
+ });
54
+ const response = await this.client.send(command);
55
+ if (!response.PublicKey) {
56
+ throw new Error('KMS failed to return public key');
57
+ }
58
+ return Buffer.from(response.PublicKey).toString('base64');
59
+ }
60
+ }
61
+ exports.KmsSigner = KmsSigner;
62
+ class KmsVerifier {
63
+ clients = new Map();
64
+ supports(algorithm) {
65
+ return algorithm === 'ECDSA-SHA-256';
66
+ }
67
+ async verify(content, signature) {
68
+ if (!signature.key_id) {
69
+ return false;
70
+ }
71
+ try {
72
+ // Extract region from key ARN if available, otherwise use default
73
+ const region = this.extractRegionFromArn(signature.key_id) || 'us-east-1';
74
+ const client = this.getClient(region);
75
+ // Calculate SHA256 digest to match what was signed
76
+ const hash = (0, crypto_1.sha256Hash)(content);
77
+ const signatureBuffer = Buffer.from(signature.signature, 'base64');
78
+ const command = new client_kms_1.VerifyCommand({
79
+ KeyId: signature.key_id,
80
+ Message: hash,
81
+ MessageType: 'DIGEST',
82
+ Signature: signatureBuffer,
83
+ SigningAlgorithm: client_kms_1.SigningAlgorithmSpec.ECDSA_SHA_256,
84
+ });
85
+ const response = await client.send(command);
86
+ return response.SignatureValid === true;
87
+ }
88
+ catch (_err) {
89
+ return false;
90
+ }
91
+ }
92
+ getClient(region) {
93
+ const existing = this.clients.get(region);
94
+ if (existing) {
95
+ return existing;
96
+ }
97
+ const client = new client_kms_1.KMSClient({ region });
98
+ this.clients.set(region, client);
99
+ return client;
100
+ }
101
+ extractRegionFromArn(keyId) {
102
+ // ARN format: arn:aws:kms:REGION:ACCOUNT:key/KEY_ID
103
+ const arnMatch = keyId.match(/^arn:aws:kms:([^:]+):/);
104
+ return arnMatch ? arnMatch[1] : null;
105
+ }
106
+ }
107
+ exports.KmsVerifier = KmsVerifier;
108
+ //# sourceMappingURL=kms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kms.js","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Registry for Verifier instances
3
+ */
4
+ import type { Verifier } from './index';
5
+ export declare class VerifierRegistry {
6
+ private verifiers;
7
+ /**
8
+ * Register a verifier
9
+ */
10
+ register(verifier: Verifier): void;
11
+ /**
12
+ * Get a verifier that supports the given algorithm
13
+ * @throws Error if no verifier supports the algorithm
14
+ */
15
+ get(algorithm: string): Verifier;
16
+ /**
17
+ * Check if any verifier supports the algorithm
18
+ */
19
+ has(algorithm: string): boolean;
20
+ /**
21
+ * Get all supported algorithms
22
+ */
23
+ getSupportedAlgorithms(): string[];
24
+ }
25
+ /**
26
+ * Get the global verifier registry (creates it if needed)
27
+ */
28
+ export declare function getVerifierRegistry(): VerifierRegistry;
29
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/signers/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAkB;IAEnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIlC;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ;IAQhC;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;CAInC;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAOtD"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Registry for Verifier instances
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VerifierRegistry = void 0;
7
+ exports.getVerifierRegistry = getVerifierRegistry;
8
+ class VerifierRegistry {
9
+ verifiers = [];
10
+ /**
11
+ * Register a verifier
12
+ */
13
+ register(verifier) {
14
+ this.verifiers.push(verifier);
15
+ }
16
+ /**
17
+ * Get a verifier that supports the given algorithm
18
+ * @throws Error if no verifier supports the algorithm
19
+ */
20
+ get(algorithm) {
21
+ const verifier = this.verifiers.find((v) => v.supports(algorithm));
22
+ if (!verifier) {
23
+ throw new Error(`No verifier registered for algorithm: ${algorithm}`);
24
+ }
25
+ return verifier;
26
+ }
27
+ /**
28
+ * Check if any verifier supports the algorithm
29
+ */
30
+ has(algorithm) {
31
+ return this.verifiers.some((v) => v.supports(algorithm));
32
+ }
33
+ /**
34
+ * Get all supported algorithms
35
+ */
36
+ getSupportedAlgorithms() {
37
+ // Note: This returns a simple list, but verifiers may support multiple algorithms
38
+ return ['ed25519', 'ECDSA-SHA-256'];
39
+ }
40
+ }
41
+ exports.VerifierRegistry = VerifierRegistry;
42
+ // Global singleton instance
43
+ let globalVerifierRegistry = null;
44
+ /**
45
+ * Get the global verifier registry (creates it if needed)
46
+ */
47
+ function getVerifierRegistry() {
48
+ if (!globalVerifierRegistry) {
49
+ globalVerifierRegistry = new VerifierRegistry();
50
+ // Auto-register built-in verifiers
51
+ initializeBuiltInVerifiers();
52
+ }
53
+ return globalVerifierRegistry;
54
+ }
55
+ /**
56
+ * Initialize built-in verifiers
57
+ */
58
+ function initializeBuiltInVerifiers() {
59
+ if (!globalVerifierRegistry)
60
+ return;
61
+ // Import and register built-in verifiers
62
+ const { Ed25519Verifier } = require('./ed25519');
63
+ const { KmsVerifier } = require('./kms');
64
+ globalVerifierRegistry.register(new Ed25519Verifier());
65
+ globalVerifierRegistry.register(new KmsVerifier());
66
+ }
67
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/signers/registry.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgDH,kDAOC;AAnDD,MAAa,gBAAgB;IACnB,SAAS,GAAe,EAAE,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,QAAkB;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,SAAiB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,kFAAkF;QAClF,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtC,CAAC;CACF;AApCD,4CAoCC;AAED,4BAA4B;AAC5B,IAAI,sBAAsB,GAA4B,IAAI,CAAC;AAE3D;;GAEG;AACH,SAAgB,mBAAmB;IACjC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChD,mCAAmC;QACnC,0BAA0B,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B;IACjC,IAAI,CAAC,sBAAsB;QAAE,OAAO;IAEpC,yCAAyC;IACzC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACvD,sBAAsB,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * TypeScript type definitions for Dossier format
3
+ */
4
+ export interface DossierFrontmatter {
5
+ version: string;
6
+ protocol_version: string;
7
+ created: string;
8
+ updated: string;
9
+ title: string;
10
+ objective: string;
11
+ status: 'draft' | 'stable' | 'deprecated';
12
+ risk_level: 'low' | 'medium' | 'high' | 'critical';
13
+ risk_factors: string[];
14
+ destructive_operations: string[];
15
+ requires_approval: boolean;
16
+ checksum?: {
17
+ algorithm: string;
18
+ hash: string;
19
+ calculated_at: string;
20
+ };
21
+ signature?: {
22
+ algorithm: string;
23
+ signature: string;
24
+ public_key: string;
25
+ key_id: string;
26
+ signed_by: string;
27
+ signed_at: string;
28
+ };
29
+ [key: string]: unknown;
30
+ }
31
+ export interface ParsedDossier {
32
+ frontmatter: DossierFrontmatter;
33
+ body: string;
34
+ raw: string;
35
+ }
36
+ export interface IntegrityResult {
37
+ status: 'valid' | 'invalid' | 'missing';
38
+ message: string;
39
+ expectedHash?: string;
40
+ actualHash?: string;
41
+ }
42
+ export interface AuthenticityResult {
43
+ status: 'verified' | 'signed_unknown' | 'unsigned' | 'invalid' | 'error';
44
+ message: string;
45
+ signer?: string;
46
+ keyId?: string;
47
+ publicKey?: string;
48
+ isTrusted: boolean;
49
+ trustedAs?: string;
50
+ }
51
+ export interface RiskAssessment {
52
+ riskLevel: 'low' | 'medium' | 'high' | 'critical' | 'unknown';
53
+ riskFactors: string[];
54
+ destructiveOperations: string[];
55
+ requiresApproval: boolean;
56
+ }
57
+ export interface VerificationResult {
58
+ dossierFile: string;
59
+ integrity: IntegrityResult;
60
+ authenticity: AuthenticityResult;
61
+ riskAssessment: RiskAssessment;
62
+ recommendation: 'ALLOW' | 'WARN' | 'BLOCK';
63
+ message: string;
64
+ errors: string[];
65
+ }
66
+ export interface TrustedKey {
67
+ publicKey: string;
68
+ keyId: string;
69
+ }
70
+ export interface DossierListItem {
71
+ name: string;
72
+ path: string;
73
+ version: string;
74
+ protocol: string;
75
+ status: string;
76
+ objective: string;
77
+ riskLevel: string;
78
+ }
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC1C,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript type definitions for Dossier format
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map