@quantiya/codevibe-core 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 (49) hide show
  1. package/README.md +178 -0
  2. package/bin/codevibe.js +7 -0
  3. package/dist/appsync/appsync-client.d.ts +132 -0
  4. package/dist/appsync/appsync-client.js +568 -0
  5. package/dist/appsync/index.d.ts +2 -0
  6. package/dist/appsync/index.js +10 -0
  7. package/dist/appsync/queries.d.ts +16 -0
  8. package/dist/appsync/queries.js +189 -0
  9. package/dist/auth/auth-cli.d.ts +5 -0
  10. package/dist/auth/auth-cli.js +217 -0
  11. package/dist/auth/auth-service.d.ts +53 -0
  12. package/dist/auth/auth-service.js +310 -0
  13. package/dist/auth/index.d.ts +2 -0
  14. package/dist/auth/index.js +9 -0
  15. package/dist/config/config.d.ts +53 -0
  16. package/dist/config/config.js +123 -0
  17. package/dist/config/index.d.ts +2 -0
  18. package/dist/config/index.js +8 -0
  19. package/dist/crypto/crypto-service.d.ts +118 -0
  20. package/dist/crypto/crypto-service.js +284 -0
  21. package/dist/crypto/index.d.ts +1 -0
  22. package/dist/crypto/index.js +9 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.js +68 -0
  25. package/dist/keychain/index.d.ts +1 -0
  26. package/dist/keychain/index.js +8 -0
  27. package/dist/keychain/keychain-manager.d.ts +125 -0
  28. package/dist/keychain/keychain-manager.js +375 -0
  29. package/dist/logger/index.d.ts +1 -0
  30. package/dist/logger/index.js +8 -0
  31. package/dist/logger/logger.d.ts +35 -0
  32. package/dist/logger/logger.js +142 -0
  33. package/dist/prompt-parser.d.ts +39 -0
  34. package/dist/prompt-parser.js +236 -0
  35. package/dist/session/index.d.ts +2 -0
  36. package/dist/session/index.js +7 -0
  37. package/dist/session/session-resume.d.ts +55 -0
  38. package/dist/session/session-resume.js +151 -0
  39. package/dist/types/auth.d.ts +15 -0
  40. package/dist/types/auth.js +3 -0
  41. package/dist/types/encryption.d.ts +54 -0
  42. package/dist/types/encryption.js +3 -0
  43. package/dist/types/events.d.ts +74 -0
  44. package/dist/types/events.js +28 -0
  45. package/dist/types/index.d.ts +4 -0
  46. package/dist/types/index.js +22 -0
  47. package/dist/types/session.d.ts +59 -0
  48. package/dist/types/session.js +22 -0
  49. package/package.json +51 -0
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized session resume/create logic for all CodeVibe plugins.
4
+ *
5
+ * All three plugins (Claude, Codex, Gemini) need the same pattern:
6
+ * 1. Check if session exists in backend (getSession)
7
+ * 2. If exists: reactivate + restore E2E session key from encryptedKeys
8
+ * 3. If not exists: generate encryption keys + create session
9
+ *
10
+ * This module eliminates the duplication across plugins.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.prepareSessionEncryption = prepareSessionEncryption;
14
+ exports.resumeOrCreateSession = resumeOrCreateSession;
15
+ const crypto_1 = require("../crypto");
16
+ const keychain_1 = require("../keychain");
17
+ const types_1 = require("../types");
18
+ /**
19
+ * Prepare E2E encryption for a new session.
20
+ *
21
+ * Generates a random session key and encrypts it for all registered devices.
22
+ * Does NOT cache the session key — callers should cache only after the session
23
+ * is successfully created in the backend.
24
+ *
25
+ * @returns Encryption data or null if no device keys found / error
26
+ */
27
+ async function prepareSessionEncryption(sessionId, appSyncClient, logger) {
28
+ try {
29
+ const deviceKeys = await appSyncClient.listUserDeviceKeys();
30
+ if (deviceKeys.length === 0) {
31
+ logger.info('No device keys found, session will not be encrypted');
32
+ return null;
33
+ }
34
+ logger.info('Preparing session encryption', {
35
+ sessionId,
36
+ deviceCount: deviceKeys.length,
37
+ });
38
+ const { sessionKey, encryptedKeys } = keychain_1.keychainManager.createSessionKey(deviceKeys);
39
+ logger.info('Session encryption prepared', {
40
+ sessionId,
41
+ deviceCount: encryptedKeys.length,
42
+ });
43
+ return { sessionKey, encryptedKeys };
44
+ }
45
+ catch (error) {
46
+ logger.warn('Failed to prepare session encryption:', error);
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Resume an existing session or create a new one.
52
+ *
53
+ * Resume path (session exists in backend):
54
+ * - Reactivates session (status → ACTIVE)
55
+ * - Restores E2E session key from encryptedKeys
56
+ *
57
+ * Create path (session does not exist):
58
+ * - Prepares E2E encryption (generates key, encrypts for all devices)
59
+ * - Encrypts projectPath and metadata
60
+ * - Creates session in backend
61
+ * - Caches session key only after successful creation
62
+ *
63
+ * @throws Propagates createSession errors (e.g., SESSION_LIMIT_EXCEEDED)
64
+ */
65
+ async function resumeOrCreateSession(input, appSyncClient, logger) {
66
+ const { sessionId, userId, agentType, projectPath, metadata } = input;
67
+ // Check if session already exists in backend
68
+ let existingSession = null;
69
+ try {
70
+ existingSession = await appSyncClient.getSession(sessionId);
71
+ }
72
+ catch (error) {
73
+ logger.warn('Failed to get session (will attempt to create new)', { sessionId, error });
74
+ }
75
+ if (existingSession) {
76
+ // RESUME PATH: reactivate existing session and restore session key
77
+ logger.info('Session exists in backend - reactivating', {
78
+ sessionId,
79
+ previousStatus: existingSession.status,
80
+ });
81
+ try {
82
+ await appSyncClient.updateSession({
83
+ sessionId,
84
+ status: types_1.SessionStatus.ACTIVE,
85
+ });
86
+ }
87
+ catch (error) {
88
+ logger.warn('Failed to reactivate existing session, will continue', { sessionId, error });
89
+ }
90
+ // Restore session key from encryptedKeys
91
+ let sessionKey = null;
92
+ const encryptedKeys = existingSession.encryptedKeys;
93
+ if (existingSession.isEncrypted && encryptedKeys?.length) {
94
+ try {
95
+ const cachedKey = await keychain_1.keychainManager.getSessionKey(sessionId, encryptedKeys);
96
+ if (cachedKey) {
97
+ sessionKey = cachedKey;
98
+ keychain_1.keychainManager.cacheSessionKey(sessionId, cachedKey);
99
+ logger.info('Session key retrieved for resumed session', { sessionId });
100
+ }
101
+ else {
102
+ logger.warn('No encrypted key for this device; proceeding without decryption', { sessionId });
103
+ }
104
+ }
105
+ catch (error) {
106
+ logger.warn('Failed to retrieve session key for resumed session', { sessionId, error });
107
+ }
108
+ }
109
+ return { resumed: true, sessionKey };
110
+ }
111
+ // NEW SESSION PATH: prepare encryption and create
112
+ const encryptionData = await prepareSessionEncryption(sessionId, appSyncClient, logger);
113
+ let sessionProjectPath = projectPath;
114
+ let sessionMetadata = metadata;
115
+ if (encryptionData) {
116
+ sessionProjectPath = crypto_1.cryptoService.encryptContent(projectPath, encryptionData.sessionKey);
117
+ if (sessionMetadata && Object.keys(sessionMetadata).length > 0) {
118
+ const encryptedMeta = crypto_1.cryptoService.encryptMetadata(sessionMetadata, encryptionData.sessionKey);
119
+ sessionMetadata = { encrypted: encryptedMeta };
120
+ }
121
+ logger.info('Session data encrypted', { sessionId });
122
+ }
123
+ logger.info('Creating new session in backend', {
124
+ sessionId,
125
+ userId,
126
+ agentType,
127
+ isEncrypted: !!encryptionData,
128
+ });
129
+ // createSession errors propagate to caller (e.g., SESSION_LIMIT_EXCEEDED)
130
+ await appSyncClient.createSession({
131
+ sessionId,
132
+ userId,
133
+ agentType,
134
+ projectPath: sessionProjectPath,
135
+ status: types_1.SessionStatus.ACTIVE,
136
+ metadata: sessionMetadata,
137
+ // E2E encryption fields
138
+ isEncrypted: encryptionData ? true : undefined,
139
+ creatorDeviceId: encryptionData ? await keychain_1.keychainManager.getDeviceId() : undefined,
140
+ encryptionVersion: encryptionData ? 1 : undefined,
141
+ encryptedKeys: encryptionData?.encryptedKeys,
142
+ });
143
+ const sessionKey = encryptionData?.sessionKey || null;
144
+ // Cache session key AFTER successful creation (avoids premature caching bug)
145
+ if (encryptionData) {
146
+ keychain_1.keychainManager.cacheSessionKey(sessionId, encryptionData.sessionKey);
147
+ }
148
+ logger.info('Session created', { sessionId, userId, isEncrypted: !!encryptionData });
149
+ return { resumed: false, sessionKey };
150
+ }
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1yZXN1bWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2Vzc2lvbi9zZXNzaW9uLXJlc3VtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOztBQW9DSCw0REE4QkM7QUFpQkQsc0RBbUdDO0FBbkxELHNDQUEwQztBQUMxQywwQ0FBOEM7QUFFOUMsb0NBSWtCO0FBaUJsQjs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsU0FBaUIsRUFDakIsYUFBNEIsRUFDNUIsTUFBYztJQUVkLElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFNUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMscURBQXFELENBQUMsQ0FBQztZQUNuRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQzFDLFNBQVM7WUFDVCxXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU07U0FDL0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRywwQkFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5GLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDekMsU0FBUztZQUNULFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTTtTQUNsQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQztJQUNkLENB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QUMsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUVyRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsaXplZCBzZXNzaW9uIHJlc3VtZS9jcmVhdGUgbG9naWMgZm9yIGFsbCBDb2RlVmliZSBwbHVnaW5zLlxuICpcbiAqIEFsbCB0aHJlZSBwbHVnaW5zIChDbGF1ZGUsIENvZGV4LCBHZW1pbmkpIG5lZWQgdGhlIHNhbWUgcGF0dGVybjpcbiAqIDEuIENoZWNrIGlmIHNlc3Npb24gZXhpc3RzIGluIGJhY2tlbmQgKGdldFNlc3Npb24pXG4gKiAyLiBJZiBleGlzdHM6IHJlYWN0aXZhdGUgKyByZXN0b3JlIEUyRSBzZXNzaW9uIGtleSBmcm9tIGVuY3J5cHRlZEtleXNcbiAqIDMuIElmIG5vdCBleGlzdHM6IGdlbmVyYXRlIGVuY3J5cHRpb24ga2V5cyArIGNyZWF0ZSBzZXNzaW9uXG4gKlxuICogVGhpcyBtb2R1bGUgZWxpbWluYXRlcyB0aGUgZHVwbGljYXRpb24gYWNyb3NzIHBsdWdpbnMuXG4gKi9cblxuaW1wb3J0IHsgQXBwU3luY0NsaWVudCB9IGZyb20gJy4uL2FwcHN5bmMnO1xuaW1wb3J0IHsgY3J5cHRvU2VydmljZSB9IGZyb20gJy4uL2NyeXB0byc7XG5pbXBvcnQgeyBrZXljaGFpbk1hbmFnZXIgfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQWdlbnRUeXBlLFxuICBTZXNzaW9uU3RhdHVzLFxuICBFbmNyeXB0ZWRTZXNzaW9uS2V5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdW1lT3JDcmVhdGVTZXNzaW9uSW5wdXQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFnZW50VHlwZTogQWdlbnRUeXBlO1xuICBwcm9qZWN0UGF0aDogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdW1lT3JDcmVhdGVTZXNzaW9uUmVzdWx0IHtcbiAgLyoqIFdoZXRoZXIgYW4gZXhpc3Rpbmcgc2Vzc2lvbiB3YXMgZm91bmQgYW5kIHJlYWN0aXZhdGVkICovXG4gIHJlc3VtZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgRTJFIHNlc3Npb24ga2V5IChmb3IgZW5jcnlwdGluZy9kZWNyeXB0aW5nIGV2ZW50cyksIG9yIG51bGwgaWYgbm8gZW5jcnlwdGlvbiAqL1xuICBzZXNzaW9uS2V5OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFByZXBhcmUgRTJFIGVuY3J5cHRpb24gZm9yIGEgbmV3IHNlc3Npb24uXG4gKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHNlc3Npb24ga2V5IGFuZCBlbmNyeXB0cyBpdCBmb3IgYWxsIHJlZ2lzdGVyZWQgZGV2aWNlcy5cbiAqIERvZXMgTk9UIGNhY2hlIHRoZSBzZXNzaW9uIGtleSDigJQgY2FsbGVycyBzaG91bGQgY2FjaGUgb25seSBhZnRlciB0aGUgc2Vzc2lvblxuICogaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgaW4gdGhlIGJhY2tlbmQuXG4gKlxuICogQHJldHVybnMgRW5jcnlwdGlvbiBkYXRhIG9yIG51bGwgaWYgbm8gZGV2aWNlIGtleXMgZm91bmQgLyBlcnJvclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVNlc3Npb25FbmNyeXB0aW9uKFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgYXBwU3luY0NsaWVudDogQXBwU3luY0NsaWVudCxcbiAgbG9nZ2VyOiBMb2dnZXIsXG4pOiBQcm9taXNlPHsgc2Vzc2lvbktleTogc3RyaW5nOyBlbmNyeXB0ZWRLZXlzOiBFbmNyeXB0ZWRTZXNzaW9uS2V5W10gfSB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZXZpY2VLZXlzID0gYXdhaXQgYXBwU3luY0NsaWVudC5saXN0VXNlckRldmljZUtleXMoKTtcblxuICAgIGlmIChkZXZpY2VLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oJ05vIGRldmljZSBrZXlzIGZvdW5kLCBzZXNzaW9uIHdpbGwgbm90IGJlIGVuY3J5cHRlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ1ByZXBhcmluZyBzZXNzaW9uIGVuY3J5cHRpb24nLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkZXZpY2VDb3VudDogZGV2aWNlS2V5cy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHNlc3Npb25LZXksIGVuY3J5cHRlZEtleXMgfSA9IGtleWNoYWluTWFuYWdlci5jcmVhdGVTZXNzaW9uS2V5KGRldmljZUtleXMpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1Nlc3Npb24gZW5jcnlwdGlvbiBwcmVwYXJlZCcsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGRldmljZUNvdW50OiBlbmNyeXB0ZWRLZXlzLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHNlc3Npb25LZXksIGVuY3J5cHRlZEtleXMgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHByZXBhcmUgc2Vzc2lvbiBlbmNyeXB0aW9uOicsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc3VtZSBhbiBleGlzdGluZyBzZXNzaW9uIG9yIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogUmVzdW1lIHBhdGggKHNlc3Npb24gZXhpc3RzIGluIGJhY2tlbmQpOlxuICogICAtIFJlYWN0aXZhdGVzIHNlc3Npb24gKHN0YXR1cyDihpIgQUNUSVZFKVxuICogICAtIFJlc3RvcmVzIEUyRSBzZXNzaW9uIGtleSBmcm9tIGVuY3J5cHRlZEtleXNcbiAqXG4gKiBDcmVhdGUgcGF0aCAoc2Vzc2lvbiBkb2VzIG5vdCBleGlzdCk6XG4gKiAgIC0gUHJlcGFyZXMgRTJFIGVuY3J5cHRpb24gKGdlbmVyYXRlcyBrZXksIGVuY3J5cHRzIGZvciBhbGwgZGV2aWNlcylcbiAqICAgLSBFbmNyeXB0cyBwcm9qZWN0UGF0aCBhbmQgbWV0YWRhdGFcbiAqICAgLSBDcmVhdGVzIHNlc3Npb24gaW4gYmFja2VuZFxuICogICAtIENhY2hlcyBzZXNzaW9uIGtleSBvbmx5IGFmdGVyIHN1Y2Nlc3NmdWwgY3JlYXRpb25cbiAqXG4gKiBAdGhyb3dzIFByb3BhZ2F0ZXMgY3JlYXRlU2Vzc2lvbiBlcnJvcnMgKGUuZy4sIFNFU1NJT05fTElNSVRfRVhDRUVERUQpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXN1bWVPckNyZWF0ZVNlc3Npb24oXG4gIGlucHV0OiBSZXN1bWVPckNyZWF0ZVNlc3Npb25JbnB1dCxcbiAgYXBwU3luY0NsaWVudDogQXBwU3luY0NsaWVudCxcbiAgbG9nZ2VyOiBMb2dnZXIsXG4pOiBQcm9taXNlPFJlc3VtZU9yQ3JlYXRlU2Vzc2lvblJlc3VsdD4ge1xuICBjb25zdCB7IHNlc3Npb25JZCwgdXNlcklkLCBhZ2VudFR5cGUsIHByb2plY3RQYXRoLCBtZXRhZGF0YSB9ID0gaW5wdXQ7XG5cbiAgLy8gQ2hlY2sgaWYgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyBpbiBiYWNrZW5kXG4gIGxldCBleGlzdGluZ1Nlc3Npb24gPSBudWxsO1xuICB0cnkge1xuICAgIGV4aXN0aW5nU2Vzc2lvbiA9IGF3YWl0IGFwcFN5bmNDbGllbnQuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZ2V0IHNlc3Npb24gKHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgbmV3KScsIHsgc2Vzc2lvbklkLCBlcnJvciB9KTtcbiAgfVxuXG4gIGlmIChleGlzdGluZ1Nlc3Npb24pIHtcbiAgICAvLyBSRVNVTUUgUEFUSDogcmVhY3RpdmF0ZSBleGlzdGluZyBzZXNzaW9uIGFuZCByZXN0b3JlIHNlc3Npb24ga2V5XG4gICAgbG9nZ2VyLmluZm8oJ1Nlc3Npb24gZXhpc3RzIGluIGJhY2tlbmQgLSByZWFjdGl2YXRpbmcnLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwcmV2aW91c1N0YXR1czogZXhpc3RpbmdTZXNzaW9uLnN0YXR1cyxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcHBTeW5jQ2xpZW50LnVwZGF0ZVNlc3Npb24oe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHN0YXR1czogU2Vzc2lvblN0YXR1cy5BQ1RJVkUsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byByZWFjdGl2YXRlIGV4aXN0aW5nIHNlc3Npb24sIHdpbGwgY29udGludWUnLCB7IHNlc3Npb25JZCwgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzZXNzaW9uIGtleSBmcm9tIGVuY3J5cHRlZEtleXNcbiAgICBsZXQgc2Vzc2lvbktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5cyA9IGV4aXN0aW5nU2Vzc2lvbi5lbmNyeXB0ZWRLZXlzO1xuICAgIGlmIChleGlzdGluZ1Nlc3Npb24uaXNFbmNyeXB0ZWQgJiYgZW5jcnlwdGVkS2V5cz8ubGVuZ3RoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYWNoZWRLZXkgPSBhd2FpdCBrZXljaGFpbk1hbmFnZXIuZ2V0U2Vzc2lvbktleShzZXNzaW9uSWQsIGVuY3J5cHRlZEtleXMpO1xuICAgICAgICBpZiAoY2FjaGVkS2V5KSB7XG4gICAgICAgICAgc2Vzc2lvbktleSA9IGNhY2hlZEtleTtcbiAgICAgICAgICBrZXljaGFpbk1hbmFnZXIuY2FjaGVTZXNzaW9uS2V5KHNlc3Npb25JZCwgY2FjaGVkS2V5KTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnU2Vzc2lvbiBrZXkgcmV0cmlldmVkIGZvciByZXN1bWVkIHNlc3Npb24nLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybignTm8gZW5jcnlwdGVkIGtleSBmb3IgdGhpcyBkZXZpY2U7IHByb2NlZWRpbmcgd2l0aG91dCBkZWNyeXB0aW9uJywgeyBzZXNzaW9uSWQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gcmV0cmlldmUgc2Vzc2lvbiBrZXkgZm9yIHJlc3VtZWQgc2Vzc2lvbicsIHsgc2Vzc2lvbklkLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXN1bWVkOiB0cnVlLCBzZXNzaW9uS2V5IH07XG4gIH1cblxuICAvLyBORVcgU0VTU0lPTiBQQVRIOiBwcmVwYXJlIGVuY3J5cHRpb24gYW5kIGNyZWF0ZVxuICBjb25zdCBlbmNyeXB0aW9uRGF0YSA9IGF3YWl0IHByZXBhcmVTZXNzaW9uRW5jcnlwdGlvbihzZXNzaW9uSWQsIGFwcFN5bmNDbGllbnQsIGxvZ2dlcik7XG5cbiAgbGV0IHNlc3Npb25Qcm9qZWN0UGF0aCA9IHByb2plY3RQYXRoO1xuICBsZXQgc2Vzc2lvbk1ldGFkYXRhID0gbWV0YWRhdGE7XG5cbiAgaWYgKGVuY3J5cHRpb25EYXRhKSB7XG4gICAgc2Vzc2lvblByb2plY3RQYXRoID0gY3J5cHRvU2VydmljZS5lbmNyeXB0Q29udGVudChwcm9qZWN0UGF0aCwgZW5jcnlwdGlvbkRhdGEuc2Vzc2lvbktleSk7XG4gICAgaWYgKHNlc3Npb25NZXRhZGF0YSAmJiBPYmplY3Qua2V5cyhzZXNzaW9uTWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZE1ldGEgPSBjcnlwdG9TZXJ2aWNlLmVuY3J5cHRNZXRhZGF0YShzZXNzaW9uTWV0YWRhdGEsIGVuY3J5cHRpb25EYXRhLnNlc3Npb25LZXkpO1xuICAgICAgc2Vzc2lvbk1ldGFkYXRhID0geyBlbmNyeXB0ZWQ6IGVuY3J5cHRlZE1ldGEgfTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oJ1Nlc3Npb24gZGF0YSBlbmNyeXB0ZWQnLCB7IHNlc3Npb25JZCB9KTtcbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdDcmVhdGluZyBuZXcgc2Vzc2lvbiBpbiBiYWNrZW5kJywge1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgYWdlbnRUeXBlLFxuICAgIGlzRW5jcnlwdGVkOiAhIWVuY3J5cHRpb25EYXRhLFxuICB9KTtcblxuICAvLyBjcmVhdGVTZXNzaW9uIGVycm9ycyBwcm9wYWdhdGUgdG8gY2FsbGVyIChlLmcuLCBTRVNTSU9OX0xJTUlUX0VYQ0VFREVEKVxuICBhd2FpdCBhcHBTeW5jQ2xpZW50LmNyZWF0ZVNlc3Npb24oe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgYWdlbnRUeXBlLFxuICAgIHByb2plY3RQYXRoOiBzZXNzaW9uUHJvamVjdFBhdGgsXG4gICAgc3RhdHVzOiBTZXNzaW9uU3RhdHVzLkFDVElWRSxcbiAgICBtZXRhZGF0YTogc2Vzc2lvbk1ldGFkYXRhLFxuICAgIC8vIEUyRSBlbmNyeXB0aW9uIGZpZWxkc1xuICAgIGlzRW5jcnlwdGVkOiBlbmNyeXB0aW9uRGF0YSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgY3JlYXRvckRldmljZUlkOiBlbmNyeXB0aW9uRGF0YSA/IGF3YWl0IGtleWNoYWluTWFuYWdlci5nZXREZXZpY2VJZCgpIDogdW5kZWZpbmVkLFxuICAgIGVuY3J5cHRpb25WZXJzaW9uOiBlbmNyeXB0aW9uRGF0YSA/IDEgOiB1bmRlZmluZWQsXG4gICAgZW5jcnlwdGVkS2V5czogZW5jcnlwdGlvbkRhdGE/LmVuY3J5cHRlZEtleXMsXG4gIH0pO1xuXG4gIGNvbnN0IHNlc3Npb25LZXkgPSBlbmNyeXB0aW9uRGF0YT8uc2Vzc2lvbktleSB8fCBudWxsO1xuXG4gIC8vIENhY2hlIHNlc3Npb24ga2V5IEFGVEVSIHN1Y2Nlc3NmdWwgY3JlYXRpb24gKGF2b2lkcyBwcmVtYXR1cmUgY2FjaGluZyBidWcpXG4gIGlmIChlbmNyeXB0aW9uRGF0YSkge1xuICAgIGtleWNoYWluTWFuYWdlci5jYWNoZVNlc3Npb25LZXkoc2Vzc2lvbklkLCBlbmNyeXB0aW9uRGF0YS5zZXNzaW9uS2V5KTtcbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdTZXNzaW9uIGNyZWF0ZWQnLCB7IHNlc3Npb25JZCwgdXNlcklkLCBpc0VuY3J5cHRlZDogISFlbmNyeXB0aW9uRGF0YSB9KTtcblxuICByZXR1cm4geyByZXN1bWVkOiBmYWxzZSwgc2Vzc2lvbktleSB9O1xufVxuIl19
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stored OAuth tokens
3
+ */
4
+ export interface TokenData {
5
+ accessToken: string;
6
+ idToken: string;
7
+ refreshToken: string;
8
+ expiresAt: number;
9
+ userId: string;
10
+ email: string;
11
+ }
12
+ /**
13
+ * Environment configuration
14
+ */
15
+ export type Environment = 'development' | 'production';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0b3JlZCBPQXV0aCB0b2tlbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbkRhdGEge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBpZFRva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudCA9ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbic7XG4iXX0=
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Encrypted session key for E2E encryption
3
+ */
4
+ export interface EncryptedSessionKey {
5
+ deviceId: string;
6
+ encryptedKey: string;
7
+ ephemeralPublicKey: string;
8
+ }
9
+ /**
10
+ * Device key stored with backend
11
+ */
12
+ export interface DeviceKey {
13
+ userId: string;
14
+ deviceId: string;
15
+ publicKey: string;
16
+ platform: string;
17
+ deviceName?: string;
18
+ createdAt: string;
19
+ lastUsedAt?: string;
20
+ }
21
+ /**
22
+ * Key pair for ECDH
23
+ */
24
+ export interface KeyPair {
25
+ privateKey: string;
26
+ publicKey: string;
27
+ }
28
+ /**
29
+ * Device identity stored in keychain
30
+ */
31
+ export interface DeviceIdentity {
32
+ deviceId: string;
33
+ privateKey: string;
34
+ publicKey: string;
35
+ createdAt: string;
36
+ }
37
+ /**
38
+ * GraphQL input for registering device key
39
+ */
40
+ export interface RegisterDeviceKeyInput {
41
+ deviceId: string;
42
+ publicKey: string;
43
+ platform: string;
44
+ deviceName?: string;
45
+ }
46
+ /**
47
+ * GraphQL input for granting session key
48
+ */
49
+ export interface GrantSessionKeyInput {
50
+ sessionId: string;
51
+ deviceId: string;
52
+ encryptedKey: string;
53
+ ephemeralPublicKey: string;
54
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lbmNyeXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuY3J5cHRlZCBzZXNzaW9uIGtleSBmb3IgRTJFIGVuY3J5cHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0ZWRTZXNzaW9uS2V5IHtcbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgZW5jcnlwdGVkS2V5OiBzdHJpbmc7XG4gIGVwaGVtZXJhbFB1YmxpY0tleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIERldmljZSBrZXkgc3RvcmVkIHdpdGggYmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUtleSB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgZGV2aWNlTmFtZT86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGxhc3RVc2VkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogS2V5IHBhaXIgZm9yIEVDREhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlQYWlyIHtcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXZpY2UgaWRlbnRpdHkgc3RvcmVkIGluIGtleWNoYWluXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlSWRlbnRpdHkge1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICBwcml2YXRlS2V5OiBzdHJpbmc7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFwaFFMIGlucHV0IGZvciByZWdpc3RlcmluZyBkZXZpY2Uga2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEZXZpY2VLZXlJbnB1dCB7XG4gIGRldmljZUlkOiBzdHJpbmc7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBkZXZpY2VOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoUUwgaW5wdXQgZm9yIGdyYW50aW5nIHNlc3Npb24ga2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhbnRTZXNzaW9uS2V5SW5wdXQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgZW5jcnlwdGVkS2V5OiBzdHJpbmc7XG4gIGVwaGVtZXJhbFB1YmxpY0tleTogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Event types matching GraphQL schema
3
+ */
4
+ export declare enum EventType {
5
+ USER_PROMPT = "USER_PROMPT",
6
+ ASSISTANT_RESPONSE = "ASSISTANT_RESPONSE",
7
+ TOOL_USE = "TOOL_USE",
8
+ NOTIFICATION = "NOTIFICATION",
9
+ INTERACTIVE_PROMPT = "INTERACTIVE_PROMPT",
10
+ PROMPT_RESPONSE = "PROMPT_RESPONSE",
11
+ REASONING = "REASONING"
12
+ }
13
+ export declare enum EventSource {
14
+ DESKTOP = "DESKTOP",
15
+ MOBILE = "MOBILE"
16
+ }
17
+ export declare enum DeliveryStatus {
18
+ SENT = "SENT",
19
+ DELIVERED = "DELIVERED",
20
+ EXECUTED = "EXECUTED"
21
+ }
22
+ /**
23
+ * Attachment type (for images/files attached to messages)
24
+ */
25
+ export interface Attachment {
26
+ id: string;
27
+ type: string;
28
+ filename?: string;
29
+ s3Key: string;
30
+ size?: number;
31
+ width?: number;
32
+ height?: number;
33
+ isEncrypted?: boolean;
34
+ }
35
+ /**
36
+ * Event type
37
+ */
38
+ export interface Event {
39
+ eventId: string;
40
+ sessionId: string;
41
+ type: EventType;
42
+ source: EventSource;
43
+ content: string;
44
+ timestamp: string;
45
+ metadata?: Record<string, any>;
46
+ promptId?: string;
47
+ attachments?: Attachment[];
48
+ deliveryStatus?: DeliveryStatus;
49
+ deliveredAt?: string;
50
+ executedAt?: string;
51
+ isEncrypted?: boolean;
52
+ }
53
+ /**
54
+ * GraphQL input for creating events
55
+ */
56
+ export interface CreateEventInput {
57
+ sessionId: string;
58
+ type: EventType;
59
+ source: EventSource;
60
+ content: string;
61
+ metadata?: Record<string, any>;
62
+ promptId?: string;
63
+ timestamp?: string;
64
+ isEncrypted?: boolean;
65
+ }
66
+ /**
67
+ * GraphQL input for updating event status
68
+ */
69
+ export interface UpdateEventStatusInput {
70
+ eventId: string;
71
+ sessionId: string;
72
+ timestamp: string;
73
+ deliveryStatus: DeliveryStatus;
74
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeliveryStatus = exports.EventSource = exports.EventType = void 0;
4
+ /**
5
+ * Event types matching GraphQL schema
6
+ */
7
+ var EventType;
8
+ (function (EventType) {
9
+ EventType["USER_PROMPT"] = "USER_PROMPT";
10
+ EventType["ASSISTANT_RESPONSE"] = "ASSISTANT_RESPONSE";
11
+ EventType["TOOL_USE"] = "TOOL_USE";
12
+ EventType["NOTIFICATION"] = "NOTIFICATION";
13
+ EventType["INTERACTIVE_PROMPT"] = "INTERACTIVE_PROMPT";
14
+ EventType["PROMPT_RESPONSE"] = "PROMPT_RESPONSE";
15
+ EventType["REASONING"] = "REASONING";
16
+ })(EventType || (exports.EventType = EventType = {}));
17
+ var EventSource;
18
+ (function (EventSource) {
19
+ EventSource["DESKTOP"] = "DESKTOP";
20
+ EventSource["MOBILE"] = "MOBILE";
21
+ })(EventSource || (exports.EventSource = EventSource = {}));
22
+ var DeliveryStatus;
23
+ (function (DeliveryStatus) {
24
+ DeliveryStatus["SENT"] = "SENT";
25
+ DeliveryStatus["DELIVERED"] = "DELIVERED";
26
+ DeliveryStatus["EXECUTED"] = "EXECUTED";
27
+ })(DeliveryStatus || (exports.DeliveryStatus = DeliveryStatus = {}));
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILElBQVksU0FRWDtBQVJELFdBQVksU0FBUztJQUNuQix3Q0FBMkIsQ0FBQTtJQUMzQixzREFBeUMsQ0FBQTtJQUN6QyxrQ0FBcUIsQ0FBQTtJQUNyQiwwQ0FBNkIsQ0FBQTtJQUM3QixzREFBeUMsQ0FBQTtJQUN6QyxnREFBbUMsQ0FBQTtJQUNuQyxvQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBUlcsU0FBUyx5QkFBVCxTQUFTLFFBUXBCO0FBRUQsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLGtDQUFtQixDQUFBO0lBQ25CLGdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxXQUFXLDJCQUFYLFdBQVcsUUFHdEI7QUFFRCxJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIsK0JBQWEsQ0FBQTtJQUNiLHlDQUF1QixDQUFBO0lBQ3ZCLHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV2ZW50IHR5cGVzIG1hdGNoaW5nIEdyYXBoUUwgc2NoZW1hXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gIFVTRVJfUFJPTVBUID0gJ1VTRVJfUFJPTVBUJyxcbiAgQVNTSVNUQU5UX1JFU1BPTlNFID0gJ0FTU0lTVEFOVF9SRVNQT05TRScsXG4gIFRPT0xfVVNFID0gJ1RPT0xfVVNFJyxcbiAgTk9USUZJQ0FUSU9OID0gJ05PVElGSUNBVElPTicsXG4gIElOVEVSQUNUSVZFX1BST01QVCA9ICdJTlRFUkFDVElWRV9QUk9NUFQnLFxuICBQUk9NUFRfUkVTUE9OU0UgPSAnUFJPTVBUX1JFU1BPTlNFJyxcbiAgUkVBU09OSU5HID0gJ1JFQVNPTklORycsXG59XG5cbmV4cG9ydCBlbnVtIEV2ZW50U291cmNlIHtcbiAgREVTS1RPUCA9ICdERVNLVE9QJyxcbiAgTU9CSUxFID0gJ01PQklMRScsXG59XG5cbmV4cG9ydCBlbnVtIERlbGl2ZXJ5U3RhdHVzIHtcbiAgU0VOVCA9ICdTRU5UJyxcbiAgREVMSVZFUkVEID0gJ0RFTElWRVJFRCcsXG4gIEVYRUNVVEVEID0gJ0VYRUNVVEVEJyxcbn1cblxuLyoqXG4gKiBBdHRhY2htZW50IHR5cGUgKGZvciBpbWFnZXMvZmlsZXMgYXR0YWNoZWQgdG8gbWVzc2FnZXMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHMzS2V5OiBzdHJpbmc7XG4gIHNpemU/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIGlzRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFdmVudCB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnQge1xuICBldmVudElkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0eXBlOiBFdmVudFR5cGU7XG4gIHNvdXJjZTogRXZlbnRTb3VyY2U7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcHJvbXB0SWQ/OiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICBkZWxpdmVyeVN0YXR1cz86IERlbGl2ZXJ5U3RhdHVzO1xuICBkZWxpdmVyZWRBdD86IHN0cmluZztcbiAgZXhlY3V0ZWRBdD86IHN0cmluZztcbiAgaXNFbmNyeXB0ZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdyYXBoUUwgaW5wdXQgZm9yIGNyZWF0aW5nIGV2ZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUV2ZW50SW5wdXQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdHlwZTogRXZlbnRUeXBlO1xuICBzb3VyY2U6IEV2ZW50U291cmNlO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcHJvbXB0SWQ/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcD86IHN0cmluZzsgIC8vIE9wdGlvbmFsIGNsaWVudC1wcm92aWRlZCB0aW1lc3RhbXAgZm9yIG9yZGVyaW5nXG4gIGlzRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHcmFwaFFMIGlucHV0IGZvciB1cGRhdGluZyBldmVudCBzdGF0dXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFN0YXR1c0lucHV0IHtcbiAgZXZlbnRJZDogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGRlbGl2ZXJ5U3RhdHVzOiBEZWxpdmVyeVN0YXR1cztcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './events';
2
+ export * from './session';
3
+ export * from './encryption';
4
+ export * from './auth';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Re-export all types
18
+ __exportStar(require("./events"), exports);
19
+ __exportStar(require("./session"), exports);
20
+ __exportStar(require("./encryption"), exports);
21
+ __exportStar(require("./auth"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNCQUFzQjtBQUN0QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLCtDQUE2QjtBQUM3Qix5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBSZS1leHBvcnQgYWxsIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24nO1xuZXhwb3J0ICogZnJvbSAnLi9lbmNyeXB0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG4iXX0=
@@ -0,0 +1,59 @@
1
+ import { EncryptedSessionKey } from './encryption';
2
+ /**
3
+ * Session status enum
4
+ */
5
+ export declare enum SessionStatus {
6
+ ACTIVE = "ACTIVE",
7
+ INACTIVE = "INACTIVE",
8
+ PAUSED = "PAUSED"
9
+ }
10
+ /**
11
+ * Agent type for multi-agent support
12
+ */
13
+ export declare enum AgentType {
14
+ CLAUDE = "CLAUDE",
15
+ GEMINI = "GEMINI",
16
+ CODEX = "CODEX"
17
+ }
18
+ /**
19
+ * Session type
20
+ */
21
+ export interface Session {
22
+ sessionId: string;
23
+ userId: string;
24
+ agentType: AgentType;
25
+ projectPath: string;
26
+ status: SessionStatus;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ metadata?: Record<string, any>;
30
+ isEncrypted?: boolean;
31
+ encryptedKeys?: EncryptedSessionKey[];
32
+ creatorDeviceId?: string;
33
+ encryptionVersion?: number;
34
+ lastHeartbeatAt?: string;
35
+ }
36
+ /**
37
+ * GraphQL input for creating sessions
38
+ */
39
+ export interface CreateSessionInput {
40
+ sessionId?: string;
41
+ userId: string;
42
+ agentType?: AgentType;
43
+ projectPath: string;
44
+ status?: SessionStatus;
45
+ metadata?: Record<string, any>;
46
+ encryptedKeys?: EncryptedSessionKey[];
47
+ creatorDeviceId?: string;
48
+ isEncrypted?: boolean;
49
+ encryptionVersion?: number;
50
+ }
51
+ /**
52
+ * GraphQL input for updating sessions
53
+ */
54
+ export interface UpdateSessionInput {
55
+ sessionId: string;
56
+ status?: SessionStatus;
57
+ metadata?: Record<string, any>;
58
+ lastHeartbeatAt?: string;
59
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentType = exports.SessionStatus = void 0;
4
+ /**
5
+ * Session status enum
6
+ */
7
+ var SessionStatus;
8
+ (function (SessionStatus) {
9
+ SessionStatus["ACTIVE"] = "ACTIVE";
10
+ SessionStatus["INACTIVE"] = "INACTIVE";
11
+ SessionStatus["PAUSED"] = "PAUSED";
12
+ })(SessionStatus || (exports.SessionStatus = SessionStatus = {}));
13
+ /**
14
+ * Agent type for multi-agent support
15
+ */
16
+ var AgentType;
17
+ (function (AgentType) {
18
+ AgentType["CLAUDE"] = "CLAUDE";
19
+ AgentType["GEMINI"] = "GEMINI";
20
+ AgentType["CODEX"] = "CODEX";
21
+ })(AgentType || (exports.AgentType = AgentType = {}));
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLGtDQUFpQixDQUFBO0lBQ2pCLHNDQUFxQixDQUFBO0lBQ3JCLGtDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxhQUFhLDZCQUFiLGFBQWEsUUFJeEI7QUFFRDs7R0FFRztBQUNILElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQiw4QkFBaUIsQ0FBQTtJQUNqQiw4QkFBaUIsQ0FBQTtJQUNqQiw0QkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbmNyeXB0ZWRTZXNzaW9uS2V5IH0gZnJvbSAnLi9lbmNyeXB0aW9uJztcblxuLyoqXG4gKiBTZXNzaW9uIHN0YXR1cyBlbnVtXG4gKi9cbmV4cG9ydCBlbnVtIFNlc3Npb25TdGF0dXMge1xuICBBQ1RJVkUgPSAnQUNUSVZFJyxcbiAgSU5BQ1RJVkUgPSAnSU5BQ1RJVkUnLFxuICBQQVVTRUQgPSAnUEFVU0VEJyxcbn1cblxuLyoqXG4gKiBBZ2VudCB0eXBlIGZvciBtdWx0aS1hZ2VudCBzdXBwb3J0XG4gKi9cbmV4cG9ydCBlbnVtIEFnZW50VHlwZSB7XG4gIENMQVVERSA9ICdDTEFVREUnLFxuICBHRU1JTkkgPSAnR0VNSU5JJyxcbiAgQ09ERVggPSAnQ09ERVgnLFxufVxuXG4vKipcbiAqIFNlc3Npb24gdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb24ge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFnZW50VHlwZTogQWdlbnRUeXBlO1xuICBwcm9qZWN0UGF0aDogc3RyaW5nO1xuICBzdGF0dXM6IFNlc3Npb25TdGF0dXM7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpc0VuY3J5cHRlZD86IGJvb2xlYW47XG4gIGVuY3J5cHRlZEtleXM/OiBFbmNyeXB0ZWRTZXNzaW9uS2V5W107XG4gIGNyZWF0b3JEZXZpY2VJZD86IHN0cmluZztcbiAgZW5jcnlwdGlvblZlcnNpb24/OiBudW1iZXI7XG4gIGxhc3RIZWFydGJlYXRBdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFwaFFMIGlucHV0IGZvciBjcmVhdGluZyBzZXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNlc3Npb25JbnB1dCB7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGFnZW50VHlwZT86IEFnZW50VHlwZTtcbiAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgc3RhdHVzPzogU2Vzc2lvblN0YXR1cztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbmNyeXB0ZWRLZXlzPzogRW5jcnlwdGVkU2Vzc2lvbktleVtdO1xuICBjcmVhdG9yRGV2aWNlSWQ/OiBzdHJpbmc7XG4gIGlzRW5jcnlwdGVkPzogYm9vbGVhbjtcbiAgZW5jcnlwdGlvblZlcnNpb24/OiBudW1iZXI7XG59XG5cbi8qKlxuICogR3JhcGhRTCBpbnB1dCBmb3IgdXBkYXRpbmcgc2Vzc2lvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVTZXNzaW9uSW5wdXQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RhdHVzPzogU2Vzc2lvblN0YXR1cztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsYXN0SGVhcnRiZWF0QXQ/OiBzdHJpbmc7XG59XG4iXX0=
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@quantiya/codevibe-core",
3
+ "version": "1.0.0",
4
+ "description": "Core library for CodeVibe plugins - shared keychain, crypto, AppSync, and auth functionality",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "codevibe": "./bin/codevibe.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "bin"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "watch": "tsc --watch",
17
+ "clean": "rm -rf dist",
18
+ "prepublishOnly": "npm run clean && npm run build",
19
+ "test": "echo \"No tests yet\" && exit 0"
20
+ },
21
+ "dependencies": {
22
+ "keytar": "^7.9.0",
23
+ "uuid": "^9.0.0",
24
+ "ws": "^8.14.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.0.0",
28
+ "@types/uuid": "^9.0.0",
29
+ "@types/ws": "^8.5.0",
30
+ "typescript": "^5.0.0"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/hendryyeh/quantiya-codevibe-core.git"
38
+ },
39
+ "author": "Quantiya",
40
+ "license": "MIT",
41
+ "keywords": [
42
+ "codevibe",
43
+ "quantiya",
44
+ "claude",
45
+ "codex",
46
+ "gemini",
47
+ "ai",
48
+ "coding",
49
+ "encryption"
50
+ ]
51
+ }