@id-wispera/core 0.1.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 (154) hide show
  1. package/README.md +268 -0
  2. package/dist/audit.d.ts +68 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +252 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/auth/index.d.ts +8 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +8 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/keychainProvider.d.ts +40 -0
  11. package/dist/auth/keychainProvider.d.ts.map +1 -0
  12. package/dist/auth/keychainProvider.js +98 -0
  13. package/dist/auth/keychainProvider.js.map +1 -0
  14. package/dist/auth/passphraseProvider.d.ts +80 -0
  15. package/dist/auth/passphraseProvider.d.ts.map +1 -0
  16. package/dist/auth/passphraseProvider.js +188 -0
  17. package/dist/auth/passphraseProvider.js.map +1 -0
  18. package/dist/auth/sessionTokenManager.d.ts +106 -0
  19. package/dist/auth/sessionTokenManager.d.ts.map +1 -0
  20. package/dist/auth/sessionTokenManager.js +263 -0
  21. package/dist/auth/sessionTokenManager.js.map +1 -0
  22. package/dist/delegation.d.ts +81 -0
  23. package/dist/delegation.d.ts.map +1 -0
  24. package/dist/delegation.js +299 -0
  25. package/dist/delegation.js.map +1 -0
  26. package/dist/detection.d.ts +35 -0
  27. package/dist/detection.d.ts.map +1 -0
  28. package/dist/detection.js +474 -0
  29. package/dist/detection.js.map +1 -0
  30. package/dist/exec/execManager.d.ts +60 -0
  31. package/dist/exec/execManager.d.ts.map +1 -0
  32. package/dist/exec/execManager.js +226 -0
  33. package/dist/exec/execManager.js.map +1 -0
  34. package/dist/exec/index.d.ts +6 -0
  35. package/dist/exec/index.d.ts.map +1 -0
  36. package/dist/exec/index.js +5 -0
  37. package/dist/exec/index.js.map +1 -0
  38. package/dist/index.d.ts +35 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +98 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/integrations/base.d.ts +64 -0
  43. package/dist/integrations/base.d.ts.map +1 -0
  44. package/dist/integrations/base.js +173 -0
  45. package/dist/integrations/base.js.map +1 -0
  46. package/dist/integrations/envMapping.d.ts +47 -0
  47. package/dist/integrations/envMapping.d.ts.map +1 -0
  48. package/dist/integrations/envMapping.js +174 -0
  49. package/dist/integrations/envMapping.js.map +1 -0
  50. package/dist/integrations/google-a2a.d.ts +48 -0
  51. package/dist/integrations/google-a2a.d.ts.map +1 -0
  52. package/dist/integrations/google-a2a.js +108 -0
  53. package/dist/integrations/google-a2a.js.map +1 -0
  54. package/dist/integrations/index.d.ts +14 -0
  55. package/dist/integrations/index.d.ts.map +1 -0
  56. package/dist/integrations/index.js +14 -0
  57. package/dist/integrations/index.js.map +1 -0
  58. package/dist/integrations/langchain.d.ts +38 -0
  59. package/dist/integrations/langchain.d.ts.map +1 -0
  60. package/dist/integrations/langchain.js +45 -0
  61. package/dist/integrations/langchain.js.map +1 -0
  62. package/dist/integrations/openai-agents.d.ts +76 -0
  63. package/dist/integrations/openai-agents.d.ts.map +1 -0
  64. package/dist/integrations/openai-agents.js +95 -0
  65. package/dist/integrations/openai-agents.js.map +1 -0
  66. package/dist/integrations/slack.d.ts +59 -0
  67. package/dist/integrations/slack.d.ts.map +1 -0
  68. package/dist/integrations/slack.js +113 -0
  69. package/dist/integrations/slack.js.map +1 -0
  70. package/dist/integrations/types.d.ts +107 -0
  71. package/dist/integrations/types.d.ts.map +1 -0
  72. package/dist/integrations/types.js +6 -0
  73. package/dist/integrations/types.js.map +1 -0
  74. package/dist/locations.d.ts +157 -0
  75. package/dist/locations.d.ts.map +1 -0
  76. package/dist/locations.js +733 -0
  77. package/dist/locations.js.map +1 -0
  78. package/dist/passport.d.ts +70 -0
  79. package/dist/passport.d.ts.map +1 -0
  80. package/dist/passport.js +429 -0
  81. package/dist/passport.js.map +1 -0
  82. package/dist/policy.d.ts +80 -0
  83. package/dist/policy.d.ts.map +1 -0
  84. package/dist/policy.js +392 -0
  85. package/dist/policy.js.map +1 -0
  86. package/dist/providers/openclaw.d.ts +80 -0
  87. package/dist/providers/openclaw.d.ts.map +1 -0
  88. package/dist/providers/openclaw.js +712 -0
  89. package/dist/providers/openclaw.js.map +1 -0
  90. package/dist/provisioning/adminPassport.d.ts +51 -0
  91. package/dist/provisioning/adminPassport.d.ts.map +1 -0
  92. package/dist/provisioning/adminPassport.js +101 -0
  93. package/dist/provisioning/adminPassport.js.map +1 -0
  94. package/dist/provisioning/index.d.ts +81 -0
  95. package/dist/provisioning/index.d.ts.map +1 -0
  96. package/dist/provisioning/index.js +141 -0
  97. package/dist/provisioning/index.js.map +1 -0
  98. package/dist/provisioning/provider.d.ts +59 -0
  99. package/dist/provisioning/provider.d.ts.map +1 -0
  100. package/dist/provisioning/provider.js +52 -0
  101. package/dist/provisioning/provider.js.map +1 -0
  102. package/dist/provisioning/providers/anthropic.d.ts +32 -0
  103. package/dist/provisioning/providers/anthropic.d.ts.map +1 -0
  104. package/dist/provisioning/providers/anthropic.js +116 -0
  105. package/dist/provisioning/providers/anthropic.js.map +1 -0
  106. package/dist/provisioning/providers/aws.d.ts +29 -0
  107. package/dist/provisioning/providers/aws.d.ts.map +1 -0
  108. package/dist/provisioning/providers/aws.js +455 -0
  109. package/dist/provisioning/providers/aws.js.map +1 -0
  110. package/dist/provisioning/providers/azure-entra.d.ts +32 -0
  111. package/dist/provisioning/providers/azure-entra.d.ts.map +1 -0
  112. package/dist/provisioning/providers/azure-entra.js +312 -0
  113. package/dist/provisioning/providers/azure-entra.js.map +1 -0
  114. package/dist/provisioning/providers/github.d.ts +24 -0
  115. package/dist/provisioning/providers/github.d.ts.map +1 -0
  116. package/dist/provisioning/providers/github.js +219 -0
  117. package/dist/provisioning/providers/github.js.map +1 -0
  118. package/dist/provisioning/providers/google-cloud.d.ts +34 -0
  119. package/dist/provisioning/providers/google-cloud.d.ts.map +1 -0
  120. package/dist/provisioning/providers/google-cloud.js +366 -0
  121. package/dist/provisioning/providers/google-cloud.js.map +1 -0
  122. package/dist/provisioning/providers/openai.d.ts +29 -0
  123. package/dist/provisioning/providers/openai.d.ts.map +1 -0
  124. package/dist/provisioning/providers/openai.js +263 -0
  125. package/dist/provisioning/providers/openai.js.map +1 -0
  126. package/dist/provisioning/providers/sendgrid.d.ts +27 -0
  127. package/dist/provisioning/providers/sendgrid.d.ts.map +1 -0
  128. package/dist/provisioning/providers/sendgrid.js +186 -0
  129. package/dist/provisioning/providers/sendgrid.js.map +1 -0
  130. package/dist/provisioning/providers/twilio.d.ts +27 -0
  131. package/dist/provisioning/providers/twilio.d.ts.map +1 -0
  132. package/dist/provisioning/providers/twilio.js +194 -0
  133. package/dist/provisioning/providers/twilio.js.map +1 -0
  134. package/dist/provisioning/types.d.ts +274 -0
  135. package/dist/provisioning/types.d.ts.map +1 -0
  136. package/dist/provisioning/types.js +6 -0
  137. package/dist/provisioning/types.js.map +1 -0
  138. package/dist/sharing.d.ts +60 -0
  139. package/dist/sharing.d.ts.map +1 -0
  140. package/dist/sharing.js +305 -0
  141. package/dist/sharing.js.map +1 -0
  142. package/dist/types.d.ts +396 -0
  143. package/dist/types.d.ts.map +1 -0
  144. package/dist/types.js +88 -0
  145. package/dist/types.js.map +1 -0
  146. package/dist/utils.d.ts +45 -0
  147. package/dist/utils.d.ts.map +1 -0
  148. package/dist/utils.js +110 -0
  149. package/dist/utils.js.map +1 -0
  150. package/dist/vault.d.ts +151 -0
  151. package/dist/vault.d.ts.map +1 -0
  152. package/dist/vault.js +499 -0
  153. package/dist/vault.js.map +1 -0
  154. package/package.json +117 -0
@@ -0,0 +1,305 @@
1
+ /**
2
+ * ID Wispera Secure Sharing
3
+ * Zero-knowledge credential sharing primitives
4
+ */
5
+ /// <reference lib="dom" />
6
+ import { WisperaError, } from './types.js';
7
+ import { getRandomBytes, getCryptoSubtle, toBufferSource } from './utils.js';
8
+ // ============================================================================
9
+ // Crypto Utilities for Sharing
10
+ // ============================================================================
11
+ /**
12
+ * Generate a random encryption key for sharing
13
+ */
14
+ function generateShareKey() {
15
+ const bytes = getRandomBytes(32);
16
+ return bytesToBase64Url(bytes);
17
+ }
18
+ /**
19
+ * Convert bytes to base64url string
20
+ */
21
+ function bytesToBase64Url(bytes) {
22
+ const base64 = Buffer.from(bytes).toString('base64');
23
+ return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
24
+ }
25
+ /**
26
+ * Convert base64url string to bytes
27
+ */
28
+ function base64UrlToBytes(str) {
29
+ const base64 = str.replace(/-/g, '+').replace(/_/g, '/');
30
+ const padding = '='.repeat((4 - (base64.length % 4)) % 4);
31
+ return new Uint8Array(Buffer.from(base64 + padding, 'base64'));
32
+ }
33
+ /**
34
+ * Derive encryption key from share key string
35
+ */
36
+ async function deriveShareKey(shareKey) {
37
+ const crypto = await getCryptoSubtle();
38
+ const keyBytes = base64UrlToBytes(shareKey);
39
+ return crypto.importKey('raw', toBufferSource(keyBytes), { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt']);
40
+ }
41
+ /**
42
+ * Encrypt data for sharing
43
+ */
44
+ async function encryptForSharing(data, key) {
45
+ const crypto = await getCryptoSubtle();
46
+ const iv = getRandomBytes(12);
47
+ const encoded = new TextEncoder().encode(data);
48
+ const encrypted = await crypto.encrypt({ name: 'AES-GCM', iv: toBufferSource(iv) }, key, encoded);
49
+ return {
50
+ encrypted: bytesToBase64Url(new Uint8Array(encrypted)),
51
+ iv: bytesToBase64Url(iv),
52
+ };
53
+ }
54
+ /**
55
+ * Decrypt shared data
56
+ */
57
+ async function decryptShared(encrypted, iv, key) {
58
+ const crypto = await getCryptoSubtle();
59
+ const decrypted = await crypto.decrypt({ name: 'AES-GCM', iv: toBufferSource(base64UrlToBytes(iv)) }, key, toBufferSource(base64UrlToBytes(encrypted)));
60
+ return new TextDecoder().decode(decrypted);
61
+ }
62
+ // ============================================================================
63
+ // Share Payload Encoding
64
+ // ============================================================================
65
+ const SHARE_FORMAT_VERSION = 1;
66
+ /**
67
+ * Encode share payload to a shareable string
68
+ */
69
+ function encodePayload(payload) {
70
+ const json = JSON.stringify(payload);
71
+ return bytesToBase64Url(new TextEncoder().encode(json));
72
+ }
73
+ /**
74
+ * Decode share payload from string
75
+ */
76
+ function decodePayload(encoded) {
77
+ const json = new TextDecoder().decode(base64UrlToBytes(encoded));
78
+ return JSON.parse(json);
79
+ }
80
+ // ============================================================================
81
+ // Share Operations
82
+ // ============================================================================
83
+ /**
84
+ * Filter passport data based on share scope
85
+ */
86
+ function filterPassportByScope(passport, scope) {
87
+ switch (scope) {
88
+ case 'metadata-only':
89
+ return {
90
+ id: passport.id,
91
+ version: passport.version,
92
+ name: passport.name,
93
+ agentId: passport.agentId,
94
+ credentialType: passport.credentialType,
95
+ // No credentialValue!
96
+ visaType: passport.visaType,
97
+ issuingAuthority: passport.issuingAuthority,
98
+ scope: passport.scope,
99
+ platforms: passport.platforms,
100
+ status: passport.status,
101
+ issuedAt: passport.issuedAt,
102
+ validFrom: passport.validFrom,
103
+ validUntil: passport.validUntil,
104
+ delegationChain: passport.delegationChain,
105
+ humanOwner: passport.humanOwner,
106
+ tags: passport.tags,
107
+ notes: passport.notes,
108
+ createdAt: passport.createdAt,
109
+ updatedAt: passport.updatedAt,
110
+ };
111
+ case 'read-only':
112
+ // Include everything but mark it as read-only via a flag
113
+ return {
114
+ ...passport,
115
+ // The recipient should treat this as immutable
116
+ };
117
+ case 'full':
118
+ default:
119
+ return passport;
120
+ }
121
+ }
122
+ /**
123
+ * Create a share link for a passport
124
+ * Returns the encrypted payload and the decryption key separately
125
+ */
126
+ export async function createShareLink(passport, options) {
127
+ // Validate options
128
+ if (options.expiresAt) {
129
+ const expiresAt = new Date(options.expiresAt);
130
+ if (expiresAt <= new Date()) {
131
+ throw new WisperaError('Share expiration must be in the future', 'INVALID_SHARE_OPTIONS');
132
+ }
133
+ }
134
+ // Filter passport data based on scope
135
+ const filteredPassport = filterPassportByScope(passport, options.scope);
136
+ // Generate encryption key
137
+ const shareKey = generateShareKey();
138
+ const cryptoKey = await deriveShareKey(shareKey);
139
+ // Encrypt the passport data
140
+ const dataToEncrypt = JSON.stringify(filteredPassport);
141
+ const { encrypted, iv } = await encryptForSharing(dataToEncrypt, cryptoKey);
142
+ // Create payload
143
+ const sharePayload = {
144
+ version: SHARE_FORMAT_VERSION,
145
+ encrypted: `${iv}.${encrypted}`, // Combine IV and ciphertext
146
+ options: {
147
+ scope: options.scope,
148
+ expiresAt: options.expiresAt,
149
+ maxViews: options.maxViews,
150
+ requireVerification: options.requireVerification,
151
+ },
152
+ createdAt: new Date().toISOString(),
153
+ passportId: passport.id,
154
+ viewCount: 0,
155
+ };
156
+ return {
157
+ payload: encodePayload(sharePayload),
158
+ key: shareKey,
159
+ };
160
+ }
161
+ /**
162
+ * Resolve (decrypt) a shared passport
163
+ */
164
+ export async function resolveShareLink(payload, key) {
165
+ // Decode payload
166
+ let sharePayload;
167
+ try {
168
+ sharePayload = decodePayload(payload);
169
+ }
170
+ catch {
171
+ throw new WisperaError('Invalid share payload format', 'INVALID_SHARE_PAYLOAD');
172
+ }
173
+ // Check version
174
+ if (sharePayload.version !== SHARE_FORMAT_VERSION) {
175
+ throw new WisperaError(`Unsupported share format version: ${sharePayload.version}`, 'UNSUPPORTED_SHARE_VERSION');
176
+ }
177
+ // Check expiration
178
+ if (sharePayload.options.expiresAt) {
179
+ const expiresAt = new Date(sharePayload.options.expiresAt);
180
+ if (new Date() > expiresAt) {
181
+ throw new WisperaError('Share link has expired', 'SHARE_EXPIRED');
182
+ }
183
+ }
184
+ // Check view count
185
+ if (sharePayload.options.maxViews !== undefined &&
186
+ sharePayload.viewCount !== undefined &&
187
+ sharePayload.viewCount >= sharePayload.options.maxViews) {
188
+ throw new WisperaError('Share link has reached maximum views', 'SHARE_MAX_VIEWS');
189
+ }
190
+ // Decrypt
191
+ try {
192
+ const cryptoKey = await deriveShareKey(key);
193
+ const [iv, encrypted] = sharePayload.encrypted.split('.');
194
+ if (!iv || !encrypted) {
195
+ throw new Error('Invalid encrypted data format');
196
+ }
197
+ const decrypted = await decryptShared(encrypted, iv, cryptoKey);
198
+ return JSON.parse(decrypted);
199
+ }
200
+ catch (err) {
201
+ if (err instanceof WisperaError)
202
+ throw err;
203
+ throw new WisperaError('Failed to decrypt share - invalid key or corrupted data', 'DECRYPT_FAILED');
204
+ }
205
+ }
206
+ /**
207
+ * Get share payload info without decrypting
208
+ */
209
+ export function getShareInfo(payload) {
210
+ try {
211
+ const sharePayload = decodePayload(payload);
212
+ return {
213
+ version: sharePayload.version,
214
+ options: sharePayload.options,
215
+ createdAt: sharePayload.createdAt,
216
+ passportId: sharePayload.passportId,
217
+ viewCount: sharePayload.viewCount,
218
+ hasCredential: sharePayload.options.scope !== 'metadata-only',
219
+ };
220
+ }
221
+ catch {
222
+ throw new WisperaError('Invalid share payload format', 'INVALID_SHARE_PAYLOAD');
223
+ }
224
+ }
225
+ /**
226
+ * Check if a share link is still valid (not expired, not maxed out)
227
+ */
228
+ export function isShareValid(payload) {
229
+ try {
230
+ const sharePayload = decodePayload(payload);
231
+ // Check expiration
232
+ if (sharePayload.options.expiresAt) {
233
+ const expiresAt = new Date(sharePayload.options.expiresAt);
234
+ if (new Date() > expiresAt) {
235
+ return { valid: false, reason: 'Share link has expired' };
236
+ }
237
+ }
238
+ // Check view count
239
+ if (sharePayload.options.maxViews !== undefined &&
240
+ sharePayload.viewCount !== undefined &&
241
+ sharePayload.viewCount >= sharePayload.options.maxViews) {
242
+ return { valid: false, reason: 'Share link has reached maximum views' };
243
+ }
244
+ return { valid: true };
245
+ }
246
+ catch {
247
+ return { valid: false, reason: 'Invalid share payload format' };
248
+ }
249
+ }
250
+ // ============================================================================
251
+ // Share URL Helpers
252
+ // ============================================================================
253
+ /**
254
+ * Create a full share URL (for web-based sharing)
255
+ * The key is passed as a URL fragment (not sent to server)
256
+ */
257
+ export function createShareUrl(baseUrl, payload, key) {
258
+ return `${baseUrl}/share/${payload}#${key}`;
259
+ }
260
+ /**
261
+ * Parse a share URL back into payload and key
262
+ */
263
+ export function parseShareUrl(url) {
264
+ try {
265
+ const parsed = new URL(url);
266
+ const pathParts = parsed.pathname.split('/');
267
+ const shareIndex = pathParts.indexOf('share');
268
+ if (shareIndex === -1 || shareIndex === pathParts.length - 1) {
269
+ return null;
270
+ }
271
+ const payload = pathParts[shareIndex + 1];
272
+ const key = parsed.hash.slice(1); // Remove leading #
273
+ if (!payload || !key) {
274
+ return null;
275
+ }
276
+ return { payload, key };
277
+ }
278
+ catch {
279
+ return null;
280
+ }
281
+ }
282
+ // ============================================================================
283
+ // One-Time Sharing
284
+ // ============================================================================
285
+ /**
286
+ * Create a one-time share (single use, auto-expires)
287
+ */
288
+ export async function createOneTimeShare(passport, expiresInMinutes = 60) {
289
+ const expiresAt = new Date(Date.now() + expiresInMinutes * 60 * 1000).toISOString();
290
+ return createShareLink(passport, {
291
+ scope: 'full',
292
+ expiresAt,
293
+ maxViews: 1,
294
+ });
295
+ }
296
+ /**
297
+ * Create a metadata-only share (no credential exposed)
298
+ */
299
+ export async function createMetadataShare(passport, options) {
300
+ return createShareLink(passport, {
301
+ scope: 'metadata-only',
302
+ ...options,
303
+ });
304
+ }
305
+ //# sourceMappingURL=sharing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.js","sourceRoot":"","sources":["../src/sharing.ts"],"names":[],"mappings":"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"}