@rine-network/core 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -7
- package/dist/index.js +32 -2
- package/dist/src/sender-key-ops.d.ts +8 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
resolveConfigDir,
|
|
19
19
|
encryptMessage,
|
|
20
20
|
decryptMessage,
|
|
21
|
+
fetchRecipientEncryptionKey,
|
|
21
22
|
generateSigningKeyPair,
|
|
22
23
|
} from "@rine-network/core";
|
|
23
24
|
|
|
@@ -25,14 +26,16 @@ import {
|
|
|
25
26
|
const configDir = resolveConfigDir();
|
|
26
27
|
|
|
27
28
|
// Create an authenticated HTTP client
|
|
29
|
+
// tokenFn: (force?: boolean) => Promise<string> — returns a Bearer token
|
|
28
30
|
const client = new HttpClient({ apiUrl: "https://rine.network", tokenFn });
|
|
29
31
|
|
|
30
32
|
// Key generation
|
|
31
33
|
const signingKeys = generateSigningKeyPair(); // Ed25519
|
|
32
34
|
|
|
33
|
-
// E2EE messaging
|
|
34
|
-
const
|
|
35
|
-
const
|
|
35
|
+
// E2EE messaging (HPKE for 1:1)
|
|
36
|
+
const recipientPk = await fetchRecipientEncryptionKey(client, recipientAgentId);
|
|
37
|
+
const encrypted = await encryptMessage(configDir, senderAgentId, recipientPk, payload);
|
|
38
|
+
const decrypted = await decryptMessage(configDir, recipientAgentId, encrypted.encrypted_payload, client);
|
|
36
39
|
```
|
|
37
40
|
|
|
38
41
|
## Exports
|
|
@@ -43,11 +46,12 @@ const decrypted = await decryptMessage(envelope, client, agentKeys);
|
|
|
43
46
|
| `http` | `HttpClient` (class), `fetchOAuthToken`, `getOrRefreshToken` |
|
|
44
47
|
| `onboard` | `performRegistration`, `performAgentCreation`, `validateSlug` |
|
|
45
48
|
| `errors` | `RineApiError`, `formatError` |
|
|
46
|
-
| `resolve-handle` | `
|
|
49
|
+
| `resolve-handle` | `resolveHandleViaWebFinger`, `resolveToUuid` |
|
|
47
50
|
| `timelock` | `solveTimeLockWithProgress` |
|
|
48
|
-
| `crypto/keys` | `generateSigningKeyPair`, `generateEncryptionKeyPair`, `generateAgentKeys`, `saveAgentKeys`, `loadAgentKeys`, `validateSigningKey`, `validateEncryptionKey`, `toBase64Url`, `fromBase64Url` |
|
|
49
|
-
| `crypto/message` | `encryptMessage`, `decryptMessage` |
|
|
50
|
-
| `crypto/sign` | `
|
|
51
|
+
| `crypto/keys` | `generateSigningKeyPair`, `generateEncryptionKeyPair`, `generateAgentKeys`, `saveAgentKeys`, `loadAgentKeys`, `validateSigningKey`, `validateEncryptionKey`, `agentKeysExist`, `toBase64Url`, `fromBase64Url` |
|
|
52
|
+
| `crypto/message` | `encryptMessage`, `decryptMessage`, `encryptGroupMessage`, `decryptGroupMessage`, `fetchRecipientEncryptionKey`, `getAgentPublicKeys` |
|
|
53
|
+
| `crypto/sign` | `signPayload`, `verifySignature` |
|
|
54
|
+
| `sender-key-ops` | `getOrCreateSenderKey`, `ingestSenderKeyDistribution` |
|
|
51
55
|
| `resolve-agent` | `resolveAgent`, `fetchAgents` |
|
|
52
56
|
| `types` | `AgentKeys`, `KeyPair`, `JWK`, `AgentRead`, `CredentialEntry`, ... |
|
|
53
57
|
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,12 @@ var RineApiError = class extends Error {
|
|
|
18
18
|
};
|
|
19
19
|
function formatError(err) {
|
|
20
20
|
if (err instanceof RineApiError) return err.detail;
|
|
21
|
-
if (err instanceof Error)
|
|
21
|
+
if (err instanceof Error) {
|
|
22
|
+
const cause = err.cause;
|
|
23
|
+
if (cause instanceof AggregateError && cause.errors.length > 0) return `${err.message}: ${cause.errors[0].message}`;
|
|
24
|
+
if (cause instanceof Error && cause.message) return `${err.message}: ${cause.message}`;
|
|
25
|
+
return err.message;
|
|
26
|
+
}
|
|
22
27
|
return String(err);
|
|
23
28
|
}
|
|
24
29
|
//#endregion
|
|
@@ -922,6 +927,31 @@ async function getOrCreateSenderKey(client, configDir, senderAgentId, groupHandl
|
|
|
922
927
|
groupId
|
|
923
928
|
};
|
|
924
929
|
}
|
|
930
|
+
/**
|
|
931
|
+
* Fetch pending sender key distributions from the inbox and ingest them.
|
|
932
|
+
* Used by `read` and `stream` to auto-recover when a sender key is missing.
|
|
933
|
+
*
|
|
934
|
+
* Optionally short-circuits once `targetSenderKeyId` is ingested.
|
|
935
|
+
* Returns the number of newly ingested keys.
|
|
936
|
+
*/
|
|
937
|
+
async function fetchAndIngestPendingSKDistributions(client, configDir, agentId, targetSenderKeyId) {
|
|
938
|
+
const inbox = await client.get(`/agents/${agentId}/messages`, {
|
|
939
|
+
type: "rine.v1.sender_key_distribution",
|
|
940
|
+
limit: 100
|
|
941
|
+
});
|
|
942
|
+
let ingested = 0;
|
|
943
|
+
for (const msg of inbox.items) try {
|
|
944
|
+
const full = await client.get(`/messages/${msg.id}`);
|
|
945
|
+
const result = await decryptMessage(configDir, agentId, full.encrypted_payload, client);
|
|
946
|
+
if (ingestSenderKeyDistribution(configDir, agentId, full.type, result)) {
|
|
947
|
+
ingested++;
|
|
948
|
+
if (targetSenderKeyId) {
|
|
949
|
+
if (JSON.parse(result.plaintext).sender_key_id === targetSenderKeyId) break;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
} catch {}
|
|
953
|
+
return ingested;
|
|
954
|
+
}
|
|
925
955
|
//#endregion
|
|
926
956
|
//#region src/onboard.ts
|
|
927
957
|
/** Validate an org slug: 2-32 chars, lowercase alphanumeric + hyphens, no leading/trailing hyphen. */
|
|
@@ -1008,4 +1038,4 @@ async function performAgentCreation(client, configDir, profile, params) {
|
|
|
1008
1038
|
return agent;
|
|
1009
1039
|
}
|
|
1010
1040
|
//#endregion
|
|
1011
|
-
export { DEFAULT_API_URL, HttpClient, RineApiError, UUID_RE, advanceChain, agentIdFromKid, agentKeysExist, bytesToUuid, cacheToken, decodeEnvelope, decryptGroupMessage, decryptMessage, deriveMessageKey, distributeSenderKey, encodeEnvelope, encryptGroupMessage, encryptMessage, encryptionPublicKeyToJWK, fetchAgents, fetchOAuthToken, fetchRecipientEncryptionKey, formatError, fromBase64Url, generateAgentKeys, generateEncryptionKeyPair, generateSenderKey, generateSigningKeyPair, getAgentPublicKeys, getCredentialEntry, getOrCreateSenderKey, getOrRefreshToken, ingestSenderKeyDistribution, isBareAgentName, jwkToPublicKey, loadAgentKeys, loadCredentials, loadSenderKeyStates, loadTokenCache, needsRotation, open, openGroup, performAgentCreation, performRegistration, resolveAgent, resolveApiUrl, resolveConfigDir, resolveHandleViaWebFinger, resolveToUuid, saveAgentKeys, saveCredentials, saveSenderKeyState, saveTokenCache, seal, sealGroup, signPayload, signingPublicKeyToJWK, solveTimeLock, solveTimeLockWithProgress, toBase64Url, uuidToBytes, validateEncryptionKey, validatePathId, validateSigningKey, validateSlug, verifySignature };
|
|
1041
|
+
export { DEFAULT_API_URL, HttpClient, RineApiError, UUID_RE, advanceChain, agentIdFromKid, agentKeysExist, bytesToUuid, cacheToken, decodeEnvelope, decryptGroupMessage, decryptMessage, deriveMessageKey, distributeSenderKey, encodeEnvelope, encryptGroupMessage, encryptMessage, encryptionPublicKeyToJWK, fetchAgents, fetchAndIngestPendingSKDistributions, fetchOAuthToken, fetchRecipientEncryptionKey, formatError, fromBase64Url, generateAgentKeys, generateEncryptionKeyPair, generateSenderKey, generateSigningKeyPair, getAgentPublicKeys, getCredentialEntry, getOrCreateSenderKey, getOrRefreshToken, ingestSenderKeyDistribution, isBareAgentName, jwkToPublicKey, loadAgentKeys, loadCredentials, loadSenderKeyStates, loadTokenCache, needsRotation, open, openGroup, performAgentCreation, performRegistration, resolveAgent, resolveApiUrl, resolveConfigDir, resolveHandleViaWebFinger, resolveToUuid, saveAgentKeys, saveCredentials, saveSenderKeyState, saveTokenCache, seal, sealGroup, signPayload, signingPublicKeyToJWK, solveTimeLock, solveTimeLockWithProgress, toBase64Url, uuidToBytes, validateEncryptionKey, validatePathId, validateSigningKey, validateSlug, verifySignature };
|
|
@@ -17,3 +17,11 @@ export declare function getOrCreateSenderKey(client: HttpClient, configDir: stri
|
|
|
17
17
|
state: SenderKeyState;
|
|
18
18
|
groupId: string;
|
|
19
19
|
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch pending sender key distributions from the inbox and ingest them.
|
|
22
|
+
* Used by `read` and `stream` to auto-recover when a sender key is missing.
|
|
23
|
+
*
|
|
24
|
+
* Optionally short-circuits once `targetSenderKeyId` is ingested.
|
|
25
|
+
* Returns the number of newly ingested keys.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fetchAndIngestPendingSKDistributions(client: HttpClient, configDir: string, agentId: string, targetSenderKeyId?: string): Promise<number>;
|