atp-sdk 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 (65) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/LICENSE +201 -0
  3. package/README.md +633 -0
  4. package/dist/__tests__/setup.d.ts.map +1 -0
  5. package/dist/__tests__/setup.js +55 -0
  6. package/dist/__tests__/setup.js.map +1 -0
  7. package/dist/client/atp.d.ts.map +1 -0
  8. package/dist/client/atp.js +90 -0
  9. package/dist/client/atp.js.map +1 -0
  10. package/dist/client/audit.d.ts.map +1 -0
  11. package/dist/client/audit.js +125 -0
  12. package/dist/client/audit.js.map +1 -0
  13. package/dist/client/base.d.ts.map +1 -0
  14. package/dist/client/base.js +190 -0
  15. package/dist/client/base.js.map +1 -0
  16. package/dist/client/credentials.d.ts.map +1 -0
  17. package/dist/client/credentials.js +112 -0
  18. package/dist/client/credentials.js.map +1 -0
  19. package/dist/client/gateway.d.ts.map +1 -0
  20. package/dist/client/gateway.js +214 -0
  21. package/dist/client/gateway.js.map +1 -0
  22. package/dist/client/identity.d.ts.map +1 -0
  23. package/dist/client/identity.js +94 -0
  24. package/dist/client/identity.js.map +1 -0
  25. package/dist/client/permissions.d.ts.map +1 -0
  26. package/dist/client/permissions.js +132 -0
  27. package/dist/client/permissions.js.map +1 -0
  28. package/dist/index.cjs +89 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +72 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/simple-agent.d.ts.map +1 -0
  33. package/dist/simple-agent.js +261 -0
  34. package/dist/simple-agent.js.map +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +48 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/utils/crypto.d.ts.map +1 -0
  40. package/dist/utils/crypto.js +100 -0
  41. package/dist/utils/crypto.js.map +1 -0
  42. package/dist/utils/did.d.ts.map +1 -0
  43. package/dist/utils/did.js +225 -0
  44. package/dist/utils/did.js.map +1 -0
  45. package/dist/utils/jwt.d.ts.map +1 -0
  46. package/dist/utils/jwt.js +235 -0
  47. package/dist/utils/jwt.js.map +1 -0
  48. package/docs/README.md +362 -0
  49. package/docs/api/README.md +1077 -0
  50. package/docs/guides/authentication.md +667 -0
  51. package/docs/guides/best-practices.md +1004 -0
  52. package/docs/guides/configuration.md +588 -0
  53. package/docs/guides/error-handling.md +1073 -0
  54. package/docs/guides/troubleshooting.md +850 -0
  55. package/examples/01-basic-setup.js +53 -0
  56. package/examples/02-identity-management.js +130 -0
  57. package/examples/03-verifiable-credentials.js +234 -0
  58. package/examples/04-permissions-and-access-control.js +326 -0
  59. package/examples/05-audit-logging.js +310 -0
  60. package/examples/06-real-time-monitoring.js +302 -0
  61. package/examples/07-advanced-use-cases.js +584 -0
  62. package/examples/README.md +211 -0
  63. package/examples/index.js +135 -0
  64. package/examples/simple-3-line.ts +51 -0
  65. package/package.json +108 -0
@@ -0,0 +1,100 @@
1
+ import * as ed25519 from '@noble/ed25519';
2
+ import { sha256 } from '@noble/hashes/sha256';
3
+ import { sha512 } from '@noble/hashes/sha512';
4
+ import { randomBytes } from 'crypto';
5
+ // Configure @noble/ed25519 to use SHA-512
6
+ ed25519.etc.sha512Sync = (...m) => sha512(ed25519.etc.concatBytes(...m));
7
+ /**
8
+ * Cryptographic utilities for ATP™ SDK
9
+ */
10
+ export class CryptoUtils {
11
+ /**
12
+ * Generate a new Ed25519 key pair
13
+ */
14
+ static async generateKeyPair() {
15
+ const privateKey = ed25519.utils.randomPrivateKey();
16
+ const publicKey = await ed25519.getPublicKey(privateKey);
17
+ return {
18
+ publicKey: Buffer.from(publicKey).toString('hex'),
19
+ privateKey: Buffer.from(privateKey).toString('hex')
20
+ };
21
+ }
22
+ /**
23
+ * Sign data with private key
24
+ */
25
+ static async signData(data, privateKey) {
26
+ const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
27
+ const privateKeyBuffer = Buffer.from(privateKey, 'hex');
28
+ const signature = await ed25519.sign(dataBuffer, privateKeyBuffer);
29
+ return Buffer.from(signature).toString('hex');
30
+ }
31
+ /**
32
+ * Verify signature with public key
33
+ */
34
+ static async verifySignature(data, signature, publicKey) {
35
+ try {
36
+ const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
37
+ const signatureBuffer = Buffer.from(signature, 'hex');
38
+ const publicKeyBuffer = Buffer.from(publicKey, 'hex');
39
+ return await ed25519.verify(signatureBuffer, dataBuffer, publicKeyBuffer);
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * Hash data using SHA-256
47
+ */
48
+ static hash(data) {
49
+ const dataBuffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;
50
+ const hash = sha256(dataBuffer);
51
+ return Buffer.from(hash).toString('hex');
52
+ }
53
+ /**
54
+ * Generate cryptographically secure random bytes
55
+ */
56
+ static randomBytes(length) {
57
+ return randomBytes(length);
58
+ }
59
+ /**
60
+ * Generate a secure random string
61
+ */
62
+ static randomString(length = 32) {
63
+ return randomBytes(Math.ceil(length / 2)).toString('hex').slice(0, length);
64
+ }
65
+ /**
66
+ * Derive key from password using a simple key derivation
67
+ */
68
+ static deriveKey(password, salt) {
69
+ const combined = password + salt;
70
+ return this.hash(combined);
71
+ }
72
+ /**
73
+ * Create a fingerprint from public key
74
+ */
75
+ static createKeyFingerprint(publicKey) {
76
+ const hash = this.hash(publicKey);
77
+ // Return first 16 characters for a shorter fingerprint
78
+ return hash.slice(0, 16);
79
+ }
80
+ /**
81
+ * Validate hex string
82
+ */
83
+ static isValidHex(hex) {
84
+ return /^[0-9a-fA-F]+$/.test(hex) && hex.length % 2 === 0;
85
+ }
86
+ /**
87
+ * Constant-time string comparison
88
+ */
89
+ static constantTimeEqual(a, b) {
90
+ if (a.length !== b.length) {
91
+ return false;
92
+ }
93
+ let result = 0;
94
+ for (let i = 0; i < a.length; i++) {
95
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
96
+ }
97
+ return result === 0;
98
+ }
99
+ }
100
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/utils/did.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAE9D;;GAEG;AACH,qBAAa,QAAQ;IACnB;;OAEG;WACU,WAAW,CAAC,OAAO,CAAC,EAAE;QACjC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,WAAW,CAAC;QACtB,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KACpD,CAAC;IA8BF;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAgBR;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA0B7E;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,CAAC,gBAAgB,GAAG,iBAAiB,GAAG,cAAc,GAAG,sBAAsB,GAAG,sBAAsB,CAAC,EAAuB,GACzI,WAAW;IAyBd;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,QAAQ,EAAE,WAAW,EACrB,QAAQ,CAAC,EAAE,GAAG,GACb;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,WAAW,CAAC;QACzB,mBAAmB,EAAE,GAAG,CAAC;QACzB,qBAAqB,EAAE,GAAG,CAAC;KAC5B;IAeD;;OAEG;WACU,eAAe,CAC1B,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC;IAoBvB;;OAEG;WACU,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBvE;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM;;;;;IASzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,MAAM;IAQT;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAoChF"}
@@ -0,0 +1,225 @@
1
+ import { CryptoUtils } from './crypto.js';
2
+ /**
3
+ * DID utilities for ATP™ SDK
4
+ */
5
+ export class DIDUtils {
6
+ /**
7
+ * Generate a new ATP DID
8
+ */
9
+ static async generateDID(options) {
10
+ const network = options?.network || 'mainnet';
11
+ const method = options?.method || 'atp';
12
+ const keyPair = await CryptoUtils.generateKeyPair();
13
+ const fingerprint = CryptoUtils.createKeyFingerprint(keyPair.publicKey);
14
+ const did = `did:${method}:${network}:${fingerprint}`;
15
+ const document = {
16
+ id: did,
17
+ '@context': ['https://www.w3.org/ns/did/v1'],
18
+ verificationMethod: [{
19
+ id: `${did}#key-1`,
20
+ type: 'Ed25519VerificationKey2020',
21
+ controller: did,
22
+ publicKeyMultibase: this.encodeMultibase(keyPair.publicKey)
23
+ }],
24
+ authentication: [`${did}#key-1`],
25
+ assertionMethod: [`${did}#key-1`],
26
+ keyAgreement: [`${did}#key-1`]
27
+ };
28
+ return {
29
+ did,
30
+ document,
31
+ keyPair
32
+ };
33
+ }
34
+ /**
35
+ * Parse a DID string
36
+ */
37
+ static parseDID(did) {
38
+ const didRegex = /^did:([^:]+):([^:]+):([^#]+)(?:#(.+))?$/;
39
+ const match = did.match(didRegex);
40
+ if (!match) {
41
+ return null;
42
+ }
43
+ return {
44
+ method: match[1],
45
+ network: match[2],
46
+ identifier: match[3],
47
+ fragment: match[4]
48
+ };
49
+ }
50
+ /**
51
+ * Validate DID format
52
+ */
53
+ static isValidDID(did) {
54
+ return this.parseDID(did) !== null;
55
+ }
56
+ /**
57
+ * Extract public key from DID document
58
+ */
59
+ static extractPublicKey(document, keyId) {
60
+ const targetKeyId = keyId || `${document.id}#key-1`;
61
+ const verificationMethod = document.verificationMethod?.find(vm => vm.id === targetKeyId);
62
+ if (!verificationMethod) {
63
+ return null;
64
+ }
65
+ if (verificationMethod.publicKeyMultibase) {
66
+ return this.decodeMultibase(verificationMethod.publicKeyMultibase);
67
+ }
68
+ if (verificationMethod.publicKeyJwk) {
69
+ // Convert JWK to hex (simplified)
70
+ const jwk = verificationMethod.publicKeyJwk;
71
+ if (jwk.x) {
72
+ return Buffer.from(jwk.x, 'base64url').toString('hex');
73
+ }
74
+ }
75
+ return null;
76
+ }
77
+ /**
78
+ * Add verification method to DID document
79
+ */
80
+ static addVerificationMethod(document, publicKey, purposes = ['authentication']) {
81
+ const keyNumber = document.verificationMethod.length + 1;
82
+ const keyId = `${document.id}#key-${keyNumber}`;
83
+ const verificationMethod = {
84
+ id: keyId,
85
+ type: 'Ed25519VerificationKey2020',
86
+ controller: document.id,
87
+ publicKeyMultibase: this.encodeMultibase(publicKey)
88
+ };
89
+ const updatedDocument = { ...document };
90
+ updatedDocument.verificationMethod = [...document.verificationMethod, verificationMethod];
91
+ // Add to specified purposes
92
+ purposes.forEach(purpose => {
93
+ if (!updatedDocument[purpose]) {
94
+ updatedDocument[purpose] = [];
95
+ }
96
+ updatedDocument[purpose].push(keyId);
97
+ });
98
+ return updatedDocument;
99
+ }
100
+ /**
101
+ * Create DID resolution result
102
+ */
103
+ static createResolutionResult(document, metadata) {
104
+ return {
105
+ '@context': 'https://w3id.org/did-resolution/v1',
106
+ didDocument: document,
107
+ didDocumentMetadata: {
108
+ created: new Date().toISOString(),
109
+ updated: new Date().toISOString(),
110
+ ...metadata
111
+ },
112
+ didResolutionMetadata: {
113
+ contentType: 'application/did+ld+json'
114
+ }
115
+ };
116
+ }
117
+ /**
118
+ * Sign DID document
119
+ */
120
+ static async signDIDDocument(document, privateKey, keyId) {
121
+ const targetKeyId = keyId || `${document.id}#key-1`;
122
+ const documentJson = JSON.stringify(document, null, 2);
123
+ const signature = await CryptoUtils.signData(documentJson, privateKey);
124
+ // Add proof to document
125
+ const signedDocument = {
126
+ ...document,
127
+ proof: {
128
+ type: 'Ed25519Signature2020',
129
+ created: new Date().toISOString(),
130
+ verificationMethod: targetKeyId,
131
+ proofPurpose: 'assertionMethod',
132
+ proofValue: signature
133
+ }
134
+ };
135
+ return signedDocument;
136
+ }
137
+ /**
138
+ * Verify DID document signature
139
+ */
140
+ static async verifyDIDDocument(document) {
141
+ if (!document.proof) {
142
+ return false;
143
+ }
144
+ const { proof, ...documentWithoutProof } = document;
145
+ const publicKey = this.extractPublicKey(document, proof.verificationMethod);
146
+ if (!publicKey) {
147
+ return false;
148
+ }
149
+ const documentJson = JSON.stringify(documentWithoutProof, null, 2);
150
+ return CryptoUtils.verifySignature(documentJson, proof.proofValue, publicKey);
151
+ }
152
+ /**
153
+ * Create service endpoint
154
+ */
155
+ static createServiceEndpoint(id, type, serviceEndpoint) {
156
+ return {
157
+ id,
158
+ type,
159
+ serviceEndpoint
160
+ };
161
+ }
162
+ /**
163
+ * Encode public key as multibase
164
+ */
165
+ static encodeMultibase(publicKeyHex) {
166
+ // Simplified multibase encoding (base58btc)
167
+ const publicKeyBuffer = Buffer.from(publicKeyHex, 'hex');
168
+ // In a real implementation, this would use proper multibase encoding
169
+ return 'z' + publicKeyBuffer.toString('base64url');
170
+ }
171
+ /**
172
+ * Decode multibase public key
173
+ */
174
+ static decodeMultibase(multibase) {
175
+ // Simplified multibase decoding
176
+ if (multibase.startsWith('z')) {
177
+ const base64url = multibase.slice(1);
178
+ return Buffer.from(base64url, 'base64url').toString('hex');
179
+ }
180
+ throw new Error('Unsupported multibase encoding');
181
+ }
182
+ /**
183
+ * Generate DID from public key
184
+ */
185
+ static didFromPublicKey(publicKey, options) {
186
+ const network = options?.network || 'mainnet';
187
+ const method = options?.method || 'atp';
188
+ const fingerprint = CryptoUtils.createKeyFingerprint(publicKey);
189
+ return `did:${method}:${network}:${fingerprint}`;
190
+ }
191
+ /**
192
+ * Validate DID document structure
193
+ */
194
+ static validateDIDDocument(document) {
195
+ const errors = [];
196
+ if (!document.id || typeof document.id !== 'string') {
197
+ errors.push('Missing or invalid id');
198
+ }
199
+ if (!document['@context'] || !Array.isArray(document['@context'])) {
200
+ errors.push('Missing or invalid @context');
201
+ }
202
+ if (!document.verificationMethod || !Array.isArray(document.verificationMethod)) {
203
+ errors.push('Missing or invalid verificationMethod');
204
+ }
205
+ if (!document.authentication || !Array.isArray(document.authentication)) {
206
+ errors.push('Missing or invalid authentication');
207
+ }
208
+ // Validate verification methods
209
+ if (document.verificationMethod) {
210
+ document.verificationMethod.forEach((vm, index) => {
211
+ if (!vm.id || !vm.type || !vm.controller) {
212
+ errors.push(`Invalid verification method at index ${index}`);
213
+ }
214
+ if (!vm.publicKeyMultibase && !vm.publicKeyJwk) {
215
+ errors.push(`Missing public key in verification method at index ${index}`);
216
+ }
217
+ });
218
+ }
219
+ return {
220
+ valid: errors.length === 0,
221
+ errors
222
+ };
223
+ }
224
+ }
225
+ //# sourceMappingURL=did.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/utils/did.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/utils/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ import { SignJWT, jwtVerify } from 'jose';
2
+ /**
3
+ * JWT utilities for ATP™ SDK
4
+ */
5
+ export class JWTUtils {
6
+ /**
7
+ * Create a DID-JWT token
8
+ */
9
+ static async createDIDJWT(payload, privateKey, did, options) {
10
+ const privateKeyBuffer = Buffer.from(privateKey, 'hex');
11
+ const jwt = new SignJWT({
12
+ ...payload,
13
+ iss: options?.issuer || did,
14
+ sub: did,
15
+ aud: options?.audience || 'atp:services'
16
+ })
17
+ .setProtectedHeader({
18
+ alg: 'EdDSA',
19
+ typ: 'JWT',
20
+ kid: `${did}#key-1`
21
+ })
22
+ .setIssuedAt();
23
+ if (options?.expiresIn) {
24
+ if (typeof options.expiresIn === 'string') {
25
+ jwt.setExpirationTime(options.expiresIn);
26
+ }
27
+ else {
28
+ jwt.setExpirationTime(Math.floor(Date.now() / 1000) + options.expiresIn);
29
+ }
30
+ }
31
+ else {
32
+ jwt.setExpirationTime('1h'); // Default 1 hour
33
+ }
34
+ return jwt.sign(privateKeyBuffer);
35
+ }
36
+ /**
37
+ * Verify a DID-JWT token
38
+ */
39
+ static async verifyDIDJWT(token, publicKey, options) {
40
+ try {
41
+ const publicKeyBuffer = Buffer.from(publicKey, 'hex');
42
+ const { payload } = await jwtVerify(token, publicKeyBuffer, {
43
+ audience: options?.audience,
44
+ issuer: options?.issuer,
45
+ clockTolerance: options?.clockTolerance || 30 // 30 seconds
46
+ });
47
+ return {
48
+ valid: true,
49
+ payload
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ valid: false,
55
+ error: error instanceof Error ? error.message : 'Unknown error'
56
+ };
57
+ }
58
+ }
59
+ /**
60
+ * Decode JWT without verification
61
+ */
62
+ static decodeJWT(token) {
63
+ try {
64
+ const parts = token.split('.');
65
+ if (parts.length !== 3) {
66
+ return null;
67
+ }
68
+ const header = JSON.parse(Buffer.from(parts[0], 'base64url').toString());
69
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString());
70
+ const signature = parts[2];
71
+ return { header, payload, signature };
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ /**
78
+ * Check if JWT is expired
79
+ */
80
+ static isExpired(token) {
81
+ const decoded = this.decodeJWT(token);
82
+ if (!decoded || !decoded.payload.exp) {
83
+ return true;
84
+ }
85
+ const now = Math.floor(Date.now() / 1000);
86
+ return decoded.payload.exp < now;
87
+ }
88
+ /**
89
+ * Get time until expiration in seconds
90
+ */
91
+ static getTimeToExpiration(token) {
92
+ const decoded = this.decodeJWT(token);
93
+ if (!decoded || !decoded.payload.exp) {
94
+ return 0;
95
+ }
96
+ const now = Math.floor(Date.now() / 1000);
97
+ return Math.max(0, decoded.payload.exp - now);
98
+ }
99
+ /**
100
+ * Create authentication token for ATP services
101
+ */
102
+ static async createAuthToken(did, privateKey, options) {
103
+ const payload = {
104
+ did,
105
+ permissions: options?.permissions || [],
106
+ trustLevel: options?.trustLevel || 'BASIC'
107
+ };
108
+ return this.createDIDJWT(payload, privateKey, did, {
109
+ audience: options?.audience || 'atp:services',
110
+ expiresIn: options?.expiresIn || '1h'
111
+ });
112
+ }
113
+ /**
114
+ * Create capability token
115
+ */
116
+ static async createCapabilityToken(issuer, subject, capabilities, privateKey, options) {
117
+ const payload = {
118
+ sub: subject,
119
+ capabilities,
120
+ restrictions: options?.restrictions,
121
+ tokenType: 'capability'
122
+ };
123
+ return this.createDIDJWT(payload, privateKey, issuer, {
124
+ audience: options?.audience || 'atp:services',
125
+ expiresIn: options?.expiresIn || '24h'
126
+ });
127
+ }
128
+ /**
129
+ * Verify capability token
130
+ */
131
+ static async verifyCapabilityToken(token, publicKey, requiredCapability) {
132
+ const result = await this.verifyDIDJWT(token, publicKey);
133
+ if (!result.valid) {
134
+ return result;
135
+ }
136
+ const payload = result.payload;
137
+ if (payload.tokenType !== 'capability') {
138
+ return {
139
+ valid: false,
140
+ error: 'Not a capability token'
141
+ };
142
+ }
143
+ const capabilities = payload.capabilities || [];
144
+ if (requiredCapability && !capabilities.includes(requiredCapability)) {
145
+ return {
146
+ valid: false,
147
+ error: `Missing required capability: ${requiredCapability}`
148
+ };
149
+ }
150
+ return {
151
+ valid: true,
152
+ capabilities,
153
+ subject: payload.sub,
154
+ restrictions: payload.restrictions
155
+ };
156
+ }
157
+ /**
158
+ * Create presentation token for verifiable credentials
159
+ */
160
+ static async createPresentationToken(holder, audience, credentialIds, privateKey, options) {
161
+ const payload = {
162
+ vp: {
163
+ '@context': ['https://www.w3.org/2018/credentials/v1'],
164
+ type: ['VerifiablePresentation'],
165
+ verifiableCredential: credentialIds,
166
+ holder
167
+ },
168
+ challenge: options?.challenge,
169
+ tokenType: 'presentation'
170
+ };
171
+ return this.createDIDJWT(payload, privateKey, holder, {
172
+ audience,
173
+ expiresIn: options?.expiresIn || '15m'
174
+ });
175
+ }
176
+ /**
177
+ * Extract DID from JWT token
178
+ */
179
+ static extractDID(token) {
180
+ const decoded = this.decodeJWT(token);
181
+ return decoded?.payload?.iss || decoded?.payload?.sub || null;
182
+ }
183
+ /**
184
+ * Extract trust level from JWT token
185
+ */
186
+ static extractTrustLevel(token) {
187
+ const decoded = this.decodeJWT(token);
188
+ return decoded?.payload?.trustLevel || null;
189
+ }
190
+ /**
191
+ * Extract permissions from JWT token
192
+ */
193
+ static extractPermissions(token) {
194
+ const decoded = this.decodeJWT(token);
195
+ return decoded?.payload?.permissions || [];
196
+ }
197
+ /**
198
+ * Create refresh token
199
+ */
200
+ static async createRefreshToken(did, privateKey, tokenId, options) {
201
+ const payload = {
202
+ tokenType: 'refresh',
203
+ jti: tokenId,
204
+ scope: 'refresh'
205
+ };
206
+ return this.createDIDJWT(payload, privateKey, did, {
207
+ audience: 'atp:auth',
208
+ expiresIn: options?.expiresIn || '30d'
209
+ });
210
+ }
211
+ /**
212
+ * Verify refresh token
213
+ */
214
+ static async verifyRefreshToken(token, publicKey) {
215
+ const result = await this.verifyDIDJWT(token, publicKey, {
216
+ audience: 'atp:auth'
217
+ });
218
+ if (!result.valid) {
219
+ return result;
220
+ }
221
+ const payload = result.payload;
222
+ if (payload.tokenType !== 'refresh') {
223
+ return {
224
+ valid: false,
225
+ error: 'Not a refresh token'
226
+ };
227
+ }
228
+ return {
229
+ valid: true,
230
+ tokenId: payload.jti,
231
+ did: payload.iss
232
+ };
233
+ }
234
+ }
235
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/utils/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAc,MAAM,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,QAAQ;IACnB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAAmB,EACnB,UAAkB,EAClB,GAAW,EACX,OAIC;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAExD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC;YACtB,GAAG,OAAO;YACV,GAAG,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG;YAC3B,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,OAAO,EAAE,QAAQ,IAAI,cAAc;SACzC,CAAC;aACC,kBAAkB,CAAC;YAClB,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,GAAG,GAAG,QAAQ;SACpB,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC1C,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;QAChD,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,KAAa,EACb,SAAiB,EACjB,OAIC;QAMD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEtD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE;gBAC1D,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE,CAAC,aAAa;aAC5D,CAAC,CAAC;YAEH,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa;QAK5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAC1B,GAAW,EACX,UAAkB,EAClB,OAKC;QAED,MAAM,OAAO,GAAe;YAC1B,GAAG;YACH,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;YACvC,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,OAAO;SAC3C,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE;YACjD,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,cAAc;YAC7C,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;SACtC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAChC,MAAc,EACd,OAAe,EACf,YAAsB,EACtB,UAAkB,EAClB,OAIC;QAED,MAAM,OAAO,GAAe;YAC1B,GAAG,EAAE,OAAO;YACZ,YAAY;YACZ,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,SAAS,EAAE,YAAY;SACxB,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;YACpD,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,cAAc;YAC7C,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAChC,KAAa,EACb,SAAiB,EACjB,kBAA2B;QAQ3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAEhC,IAAI,OAAO,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACvC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,wBAAwB;aAChC,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAwB,IAAI,EAAE,CAAC;QAE5D,IAAI,kBAAkB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrE,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,gCAAgC,kBAAkB,EAAE;aAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,YAAY;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAClC,MAAc,EACd,QAAgB,EAChB,aAAuB,EACvB,UAAkB,EAClB,OAGC;QAED,MAAM,OAAO,GAAe;YAC1B,EAAE,EAAE;gBACF,UAAU,EAAE,CAAC,wCAAwC,CAAC;gBACtD,IAAI,EAAE,CAAC,wBAAwB,CAAC;gBAChC,oBAAoB,EAAE,aAAa;gBACnC,MAAM;aACP;YACD,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,SAAS,EAAE,cAAc;SAC1B,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;YACpD,QAAQ;YACR,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAa;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,OAAO,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAa;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,OAAO,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAC7B,GAAW,EACX,UAAkB,EAClB,OAAe,EACf,OAEC;QAED,MAAM,OAAO,GAAe;YAC1B,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE;YACjD,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAC7B,KAAa,EACb,SAAiB;QAOjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE;YACvD,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;QAEhC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,qBAAqB;aAC7B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,OAAO,CAAC,GAAa;YAC9B,GAAG,EAAE,OAAO,CAAC,GAAa;SAC3B,CAAC;IACJ,CAAC;CACF"}