@agent-relay/cloud 2.0.23 → 6.0.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.
Files changed (301) hide show
  1. package/dist/api-client.d.ts +33 -0
  2. package/dist/api-client.d.ts.map +1 -0
  3. package/dist/api-client.js +123 -0
  4. package/dist/api-client.js.map +1 -0
  5. package/dist/auth.d.ts +13 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +299 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/connect.d.ts +45 -0
  10. package/dist/connect.d.ts.map +1 -0
  11. package/dist/connect.js +166 -0
  12. package/dist/connect.js.map +1 -0
  13. package/dist/index.d.ts +7 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -37
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/ssh-interactive.d.ts +70 -0
  18. package/dist/lib/ssh-interactive.d.ts.map +1 -0
  19. package/dist/lib/ssh-interactive.js +440 -0
  20. package/dist/lib/ssh-interactive.js.map +1 -0
  21. package/dist/lib/ssh-runtime.d.ts +35 -0
  22. package/dist/lib/ssh-runtime.d.ts.map +1 -0
  23. package/dist/lib/ssh-runtime.js +52 -0
  24. package/dist/lib/ssh-runtime.js.map +1 -0
  25. package/dist/types.d.ts +76 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +12 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/workflows.d.ts +49 -0
  30. package/dist/workflows.d.ts.map +1 -0
  31. package/dist/workflows.js +473 -0
  32. package/dist/workflows.js.map +1 -0
  33. package/package.json +12 -25
  34. package/dist/api/admin.d.ts +0 -8
  35. package/dist/api/admin.d.ts.map +0 -1
  36. package/dist/api/admin.js +0 -225
  37. package/dist/api/admin.js.map +0 -1
  38. package/dist/api/auth.d.ts +0 -20
  39. package/dist/api/auth.d.ts.map +0 -1
  40. package/dist/api/auth.js +0 -138
  41. package/dist/api/auth.js.map +0 -1
  42. package/dist/api/billing.d.ts +0 -7
  43. package/dist/api/billing.d.ts.map +0 -1
  44. package/dist/api/billing.js +0 -564
  45. package/dist/api/billing.js.map +0 -1
  46. package/dist/api/cli-pty-runner.d.ts +0 -53
  47. package/dist/api/cli-pty-runner.d.ts.map +0 -1
  48. package/dist/api/cli-pty-runner.js +0 -175
  49. package/dist/api/cli-pty-runner.js.map +0 -1
  50. package/dist/api/codex-auth-helper.d.ts +0 -21
  51. package/dist/api/codex-auth-helper.d.ts.map +0 -1
  52. package/dist/api/codex-auth-helper.js +0 -327
  53. package/dist/api/codex-auth-helper.js.map +0 -1
  54. package/dist/api/consensus.d.ts +0 -13
  55. package/dist/api/consensus.d.ts.map +0 -1
  56. package/dist/api/consensus.js +0 -261
  57. package/dist/api/consensus.js.map +0 -1
  58. package/dist/api/coordinators.d.ts +0 -8
  59. package/dist/api/coordinators.d.ts.map +0 -1
  60. package/dist/api/coordinators.js +0 -750
  61. package/dist/api/coordinators.js.map +0 -1
  62. package/dist/api/daemons.d.ts +0 -12
  63. package/dist/api/daemons.d.ts.map +0 -1
  64. package/dist/api/daemons.js +0 -535
  65. package/dist/api/daemons.js.map +0 -1
  66. package/dist/api/email-auth.d.ts +0 -11
  67. package/dist/api/email-auth.d.ts.map +0 -1
  68. package/dist/api/email-auth.js +0 -347
  69. package/dist/api/email-auth.js.map +0 -1
  70. package/dist/api/generic-webhooks.d.ts +0 -8
  71. package/dist/api/generic-webhooks.d.ts.map +0 -1
  72. package/dist/api/generic-webhooks.js +0 -129
  73. package/dist/api/generic-webhooks.js.map +0 -1
  74. package/dist/api/git.d.ts +0 -8
  75. package/dist/api/git.d.ts.map +0 -1
  76. package/dist/api/git.js +0 -269
  77. package/dist/api/git.js.map +0 -1
  78. package/dist/api/github-app.d.ts +0 -11
  79. package/dist/api/github-app.d.ts.map +0 -1
  80. package/dist/api/github-app.js +0 -223
  81. package/dist/api/github-app.js.map +0 -1
  82. package/dist/api/middleware/planLimits.d.ts +0 -43
  83. package/dist/api/middleware/planLimits.d.ts.map +0 -1
  84. package/dist/api/middleware/planLimits.js +0 -202
  85. package/dist/api/middleware/planLimits.js.map +0 -1
  86. package/dist/api/monitoring.d.ts +0 -11
  87. package/dist/api/monitoring.d.ts.map +0 -1
  88. package/dist/api/monitoring.js +0 -578
  89. package/dist/api/monitoring.js.map +0 -1
  90. package/dist/api/nango-auth.d.ts +0 -9
  91. package/dist/api/nango-auth.d.ts.map +0 -1
  92. package/dist/api/nango-auth.js +0 -741
  93. package/dist/api/nango-auth.js.map +0 -1
  94. package/dist/api/onboarding.d.ts +0 -15
  95. package/dist/api/onboarding.d.ts.map +0 -1
  96. package/dist/api/onboarding.js +0 -679
  97. package/dist/api/onboarding.js.map +0 -1
  98. package/dist/api/policy.d.ts +0 -8
  99. package/dist/api/policy.d.ts.map +0 -1
  100. package/dist/api/policy.js +0 -229
  101. package/dist/api/policy.js.map +0 -1
  102. package/dist/api/provider-env.d.ts +0 -26
  103. package/dist/api/provider-env.d.ts.map +0 -1
  104. package/dist/api/provider-env.js +0 -141
  105. package/dist/api/provider-env.js.map +0 -1
  106. package/dist/api/providers.d.ts +0 -7
  107. package/dist/api/providers.d.ts.map +0 -1
  108. package/dist/api/providers.js +0 -574
  109. package/dist/api/providers.js.map +0 -1
  110. package/dist/api/repos.d.ts +0 -8
  111. package/dist/api/repos.d.ts.map +0 -1
  112. package/dist/api/repos.js +0 -577
  113. package/dist/api/repos.js.map +0 -1
  114. package/dist/api/sessions.d.ts +0 -11
  115. package/dist/api/sessions.d.ts.map +0 -1
  116. package/dist/api/sessions.js +0 -302
  117. package/dist/api/sessions.js.map +0 -1
  118. package/dist/api/teams.d.ts +0 -7
  119. package/dist/api/teams.d.ts.map +0 -1
  120. package/dist/api/teams.js +0 -281
  121. package/dist/api/teams.js.map +0 -1
  122. package/dist/api/test-helpers.d.ts +0 -10
  123. package/dist/api/test-helpers.d.ts.map +0 -1
  124. package/dist/api/test-helpers.js +0 -745
  125. package/dist/api/test-helpers.js.map +0 -1
  126. package/dist/api/usage.d.ts +0 -7
  127. package/dist/api/usage.d.ts.map +0 -1
  128. package/dist/api/usage.js +0 -111
  129. package/dist/api/usage.js.map +0 -1
  130. package/dist/api/webhooks.d.ts +0 -8
  131. package/dist/api/webhooks.d.ts.map +0 -1
  132. package/dist/api/webhooks.js +0 -645
  133. package/dist/api/webhooks.js.map +0 -1
  134. package/dist/api/workspaces.d.ts +0 -25
  135. package/dist/api/workspaces.d.ts.map +0 -1
  136. package/dist/api/workspaces.js +0 -1799
  137. package/dist/api/workspaces.js.map +0 -1
  138. package/dist/billing/index.d.ts +0 -9
  139. package/dist/billing/index.d.ts.map +0 -1
  140. package/dist/billing/index.js +0 -9
  141. package/dist/billing/index.js.map +0 -1
  142. package/dist/billing/plans.d.ts +0 -39
  143. package/dist/billing/plans.d.ts.map +0 -1
  144. package/dist/billing/plans.js +0 -245
  145. package/dist/billing/plans.js.map +0 -1
  146. package/dist/billing/service.d.ts +0 -80
  147. package/dist/billing/service.d.ts.map +0 -1
  148. package/dist/billing/service.js +0 -388
  149. package/dist/billing/service.js.map +0 -1
  150. package/dist/billing/types.d.ts +0 -141
  151. package/dist/billing/types.d.ts.map +0 -1
  152. package/dist/billing/types.js +0 -7
  153. package/dist/billing/types.js.map +0 -1
  154. package/dist/config.d.ts +0 -5
  155. package/dist/config.d.ts.map +0 -1
  156. package/dist/config.js +0 -5
  157. package/dist/config.js.map +0 -1
  158. package/dist/db/bulk-ingest.d.ts +0 -89
  159. package/dist/db/bulk-ingest.d.ts.map +0 -1
  160. package/dist/db/bulk-ingest.js +0 -268
  161. package/dist/db/bulk-ingest.js.map +0 -1
  162. package/dist/db/drizzle.d.ts +0 -290
  163. package/dist/db/drizzle.d.ts.map +0 -1
  164. package/dist/db/drizzle.js +0 -1422
  165. package/dist/db/drizzle.js.map +0 -1
  166. package/dist/db/index.d.ts +0 -56
  167. package/dist/db/index.d.ts.map +0 -1
  168. package/dist/db/index.js +0 -70
  169. package/dist/db/index.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -5117
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -656
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/provisioner/index.d.ts +0 -207
  175. package/dist/provisioner/index.d.ts.map +0 -1
  176. package/dist/provisioner/index.js +0 -2118
  177. package/dist/provisioner/index.js.map +0 -1
  178. package/dist/server.d.ts +0 -17
  179. package/dist/server.d.ts.map +0 -1
  180. package/dist/server.js +0 -2055
  181. package/dist/server.js.map +0 -1
  182. package/dist/services/auto-scaler.d.ts +0 -152
  183. package/dist/services/auto-scaler.d.ts.map +0 -1
  184. package/dist/services/auto-scaler.js +0 -439
  185. package/dist/services/auto-scaler.js.map +0 -1
  186. package/dist/services/capacity-manager.d.ts +0 -148
  187. package/dist/services/capacity-manager.d.ts.map +0 -1
  188. package/dist/services/capacity-manager.js +0 -449
  189. package/dist/services/capacity-manager.js.map +0 -1
  190. package/dist/services/ci-agent-spawner.d.ts +0 -49
  191. package/dist/services/ci-agent-spawner.d.ts.map +0 -1
  192. package/dist/services/ci-agent-spawner.js +0 -373
  193. package/dist/services/ci-agent-spawner.js.map +0 -1
  194. package/dist/services/cloud-message-bus.d.ts +0 -28
  195. package/dist/services/cloud-message-bus.d.ts.map +0 -1
  196. package/dist/services/cloud-message-bus.js +0 -19
  197. package/dist/services/cloud-message-bus.js.map +0 -1
  198. package/dist/services/compute-enforcement.d.ts +0 -57
  199. package/dist/services/compute-enforcement.d.ts.map +0 -1
  200. package/dist/services/compute-enforcement.js +0 -175
  201. package/dist/services/compute-enforcement.js.map +0 -1
  202. package/dist/services/coordinator.d.ts +0 -62
  203. package/dist/services/coordinator.d.ts.map +0 -1
  204. package/dist/services/coordinator.js +0 -389
  205. package/dist/services/coordinator.js.map +0 -1
  206. package/dist/services/index.d.ts +0 -17
  207. package/dist/services/index.d.ts.map +0 -1
  208. package/dist/services/index.js +0 -25
  209. package/dist/services/index.js.map +0 -1
  210. package/dist/services/intro-expiration.d.ts +0 -60
  211. package/dist/services/intro-expiration.d.ts.map +0 -1
  212. package/dist/services/intro-expiration.js +0 -252
  213. package/dist/services/intro-expiration.js.map +0 -1
  214. package/dist/services/mention-handler.d.ts +0 -65
  215. package/dist/services/mention-handler.d.ts.map +0 -1
  216. package/dist/services/mention-handler.js +0 -405
  217. package/dist/services/mention-handler.js.map +0 -1
  218. package/dist/services/nango.d.ts +0 -219
  219. package/dist/services/nango.d.ts.map +0 -1
  220. package/dist/services/nango.js +0 -424
  221. package/dist/services/nango.js.map +0 -1
  222. package/dist/services/persistence.d.ts +0 -131
  223. package/dist/services/persistence.d.ts.map +0 -1
  224. package/dist/services/persistence.js +0 -200
  225. package/dist/services/persistence.js.map +0 -1
  226. package/dist/services/planLimits.d.ts +0 -147
  227. package/dist/services/planLimits.d.ts.map +0 -1
  228. package/dist/services/planLimits.js +0 -335
  229. package/dist/services/planLimits.js.map +0 -1
  230. package/dist/services/presence-registry.d.ts +0 -56
  231. package/dist/services/presence-registry.d.ts.map +0 -1
  232. package/dist/services/presence-registry.js +0 -91
  233. package/dist/services/presence-registry.js.map +0 -1
  234. package/dist/services/scaling-orchestrator.d.ts +0 -159
  235. package/dist/services/scaling-orchestrator.d.ts.map +0 -1
  236. package/dist/services/scaling-orchestrator.js +0 -502
  237. package/dist/services/scaling-orchestrator.js.map +0 -1
  238. package/dist/services/scaling-policy.d.ts +0 -121
  239. package/dist/services/scaling-policy.d.ts.map +0 -1
  240. package/dist/services/scaling-policy.js +0 -415
  241. package/dist/services/scaling-policy.js.map +0 -1
  242. package/dist/services/ssh-security.d.ts +0 -31
  243. package/dist/services/ssh-security.d.ts.map +0 -1
  244. package/dist/services/ssh-security.js +0 -63
  245. package/dist/services/ssh-security.js.map +0 -1
  246. package/dist/services/workspace-keepalive.d.ts +0 -76
  247. package/dist/services/workspace-keepalive.d.ts.map +0 -1
  248. package/dist/services/workspace-keepalive.js +0 -234
  249. package/dist/services/workspace-keepalive.js.map +0 -1
  250. package/dist/shims/consensus.d.ts +0 -23
  251. package/dist/shims/consensus.d.ts.map +0 -1
  252. package/dist/shims/consensus.js +0 -5
  253. package/dist/shims/consensus.js.map +0 -1
  254. package/dist/webhooks/index.d.ts +0 -24
  255. package/dist/webhooks/index.d.ts.map +0 -1
  256. package/dist/webhooks/index.js +0 -29
  257. package/dist/webhooks/index.js.map +0 -1
  258. package/dist/webhooks/parsers/github.d.ts +0 -8
  259. package/dist/webhooks/parsers/github.d.ts.map +0 -1
  260. package/dist/webhooks/parsers/github.js +0 -234
  261. package/dist/webhooks/parsers/github.js.map +0 -1
  262. package/dist/webhooks/parsers/index.d.ts +0 -23
  263. package/dist/webhooks/parsers/index.d.ts.map +0 -1
  264. package/dist/webhooks/parsers/index.js +0 -30
  265. package/dist/webhooks/parsers/index.js.map +0 -1
  266. package/dist/webhooks/parsers/linear.d.ts +0 -9
  267. package/dist/webhooks/parsers/linear.d.ts.map +0 -1
  268. package/dist/webhooks/parsers/linear.js +0 -258
  269. package/dist/webhooks/parsers/linear.js.map +0 -1
  270. package/dist/webhooks/parsers/slack.d.ts +0 -9
  271. package/dist/webhooks/parsers/slack.d.ts.map +0 -1
  272. package/dist/webhooks/parsers/slack.js +0 -214
  273. package/dist/webhooks/parsers/slack.js.map +0 -1
  274. package/dist/webhooks/responders/github.d.ts +0 -8
  275. package/dist/webhooks/responders/github.d.ts.map +0 -1
  276. package/dist/webhooks/responders/github.js +0 -73
  277. package/dist/webhooks/responders/github.js.map +0 -1
  278. package/dist/webhooks/responders/index.d.ts +0 -23
  279. package/dist/webhooks/responders/index.d.ts.map +0 -1
  280. package/dist/webhooks/responders/index.js +0 -30
  281. package/dist/webhooks/responders/index.js.map +0 -1
  282. package/dist/webhooks/responders/linear.d.ts +0 -9
  283. package/dist/webhooks/responders/linear.d.ts.map +0 -1
  284. package/dist/webhooks/responders/linear.js +0 -149
  285. package/dist/webhooks/responders/linear.js.map +0 -1
  286. package/dist/webhooks/responders/slack.d.ts +0 -20
  287. package/dist/webhooks/responders/slack.d.ts.map +0 -1
  288. package/dist/webhooks/responders/slack.js +0 -178
  289. package/dist/webhooks/responders/slack.js.map +0 -1
  290. package/dist/webhooks/router.d.ts +0 -25
  291. package/dist/webhooks/router.d.ts.map +0 -1
  292. package/dist/webhooks/router.js +0 -504
  293. package/dist/webhooks/router.js.map +0 -1
  294. package/dist/webhooks/rules-engine.d.ts +0 -24
  295. package/dist/webhooks/rules-engine.d.ts.map +0 -1
  296. package/dist/webhooks/rules-engine.js +0 -287
  297. package/dist/webhooks/rules-engine.js.map +0 -1
  298. package/dist/webhooks/types.d.ts +0 -186
  299. package/dist/webhooks/types.d.ts.map +0 -1
  300. package/dist/webhooks/types.js +0 -8
  301. package/dist/webhooks/types.js.map +0 -1
@@ -1,424 +0,0 @@
1
- import { Nango } from '@nangohq/node';
2
- import crypto from 'node:crypto';
3
- import { getConfig } from '../config.js';
4
- /**
5
- * Nango Integration Configuration
6
- *
7
- * REQUIRED SCOPES:
8
- * - github (GITHUB_USER): Requires 'user:email' scope for email reconciliation.
9
- * Configure this in Nango Dashboard: Integrations → GitHub → OAuth Scopes
10
- */
11
- export const NANGO_INTEGRATIONS = {
12
- GITHUB_USER: 'github',
13
- GITHUB_APP: 'github-app-oauth',
14
- };
15
- class NangoService {
16
- _client = null;
17
- _secret = null;
18
- /** Lazily initialize client on first use to avoid requiring env vars at import */
19
- get client() {
20
- if (!this._client) {
21
- const config = getConfig();
22
- this._secret = config.nango.secretKey;
23
- this._client = new Nango({
24
- secretKey: config.nango.secretKey,
25
- ...(config.nango.host ? { host: config.nango.host } : {}),
26
- });
27
- }
28
- return this._client;
29
- }
30
- get secret() {
31
- if (!this._secret) {
32
- this._secret = getConfig().nango.secretKey;
33
- }
34
- return this._secret;
35
- }
36
- /**
37
- * Create a Nango connect session restricted to specific integrations.
38
- */
39
- async createConnectSession(allowedIntegrations, endUser) {
40
- const { data } = await this.client.createConnectSession({
41
- allowed_integrations: allowedIntegrations,
42
- end_user: {
43
- id: endUser.id,
44
- email: endUser.email,
45
- },
46
- });
47
- return data;
48
- }
49
- /**
50
- * Fetch GitHub user profile via Nango proxy.
51
- */
52
- async getGithubUser(connectionId) {
53
- const response = await this.client.get({
54
- connectionId,
55
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_USER,
56
- endpoint: '/user',
57
- });
58
- return response.data;
59
- }
60
- /**
61
- * Fetch all email addresses associated with a GitHub user.
62
- * Requires 'user:email' scope to be configured in Nango.
63
- * @see https://docs.github.com/en/rest/users/emails#list-email-addresses-for-the-authenticated-user
64
- */
65
- async getGithubUserEmails(connectionId) {
66
- try {
67
- const response = await this.client.get({
68
- connectionId,
69
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_USER,
70
- endpoint: '/user/emails',
71
- });
72
- return response.data || [];
73
- }
74
- catch (err) {
75
- // If scope is not granted, return empty array
76
- const error = err;
77
- if (error.response?.status === 403 || error.response?.status === 404) {
78
- console.warn('[nango] Cannot fetch user emails - user:email scope may not be granted');
79
- return [];
80
- }
81
- console.error('[nango] Error fetching user emails:', err);
82
- return [];
83
- }
84
- }
85
- /**
86
- * Retrieve an installation access token from a GitHub App connection.
87
- * Use this ONLY when you need the raw token (e.g., for git clone URLs).
88
- * For API calls, use the proxy methods instead.
89
- */
90
- async getGithubAppToken(connectionId) {
91
- try {
92
- const token = await this.client.getToken(NANGO_INTEGRATIONS.GITHUB_APP, connectionId, false, true);
93
- // Handle different return formats from Nango
94
- if (typeof token === 'string') {
95
- return token;
96
- }
97
- // Nango may return an object with access_token
98
- if (token && typeof token === 'object') {
99
- const tokenObj = token;
100
- if (tokenObj.access_token) {
101
- return tokenObj.access_token;
102
- }
103
- if (tokenObj.token) {
104
- return tokenObj.token;
105
- }
106
- }
107
- console.error('[nango] Unexpected token format:', typeof token, token);
108
- throw new Error('Expected GitHub App token to be a string');
109
- }
110
- catch (err) {
111
- // Handle 404 (connection not found) gracefully
112
- const error = err;
113
- const status = error.response?.status || error.status;
114
- if (status === 404) {
115
- throw new Error(`GitHub App connection not found: ${connectionId} (may have been disconnected)`);
116
- }
117
- // Re-throw with cleaner message
118
- throw new Error(`Failed to get GitHub App token: ${err.message || 'Unknown error'}`);
119
- }
120
- }
121
- /**
122
- * Retrieve the user's OAuth access token from a GitHub App OAuth connection.
123
- * This is the user-level token (not the installation token).
124
- * Use this for operations that require user context (e.g., gh CLI).
125
- *
126
- * The user token is stored in connection_config.userCredentials.access_token
127
- * by Nango's GitHub App OAuth flow. This is a gho_* or ghu_* token that
128
- * works for both git operations and gh CLI commands.
129
- */
130
- async getGithubUserOAuthToken(connectionId) {
131
- try {
132
- const connection = await this.client.getConnection(NANGO_INTEGRATIONS.GITHUB_APP, connectionId);
133
- const connConfig = connection.connection_config;
134
- // Check for userCredentials.access_token (the user's personal OAuth token)
135
- const userCredentials = connConfig?.userCredentials;
136
- if (userCredentials?.access_token && typeof userCredentials.access_token === 'string') {
137
- return userCredentials.access_token;
138
- }
139
- throw new Error('No userCredentials.access_token in connection_config');
140
- }
141
- catch (err) {
142
- const message = err instanceof Error ? err.message : 'Unknown error';
143
- console.log('[nango] getGithubUserOAuthToken failed:', message);
144
- throw new Error('Could not retrieve GitHub user OAuth token');
145
- }
146
- }
147
- /**
148
- * Retrieve the user's OAuth token from a 'github' user connection.
149
- * This is for the separate GitHub OAuth login (not the App connection).
150
- */
151
- async getGithubUserToken(connectionId) {
152
- const token = await this.client.getToken(NANGO_INTEGRATIONS.GITHUB_USER, connectionId);
153
- if (typeof token === 'string') {
154
- return token;
155
- }
156
- if (token && typeof token === 'object') {
157
- const tokenObj = token;
158
- if (tokenObj.access_token) {
159
- return tokenObj.access_token;
160
- }
161
- if (tokenObj.token) {
162
- return tokenObj.token;
163
- }
164
- }
165
- throw new Error('Could not retrieve GitHub user token');
166
- }
167
- /**
168
- * List repositories available to a GitHub App installation using the Nango Proxy.
169
- * The proxy automatically handles token injection and refresh.
170
- * @see https://nango.dev/docs/implementation-guides/requests-proxy/implement-requests-proxy
171
- */
172
- async listGithubAppRepos(connectionId) {
173
- const response = await this.client.get({
174
- connectionId,
175
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_APP,
176
- endpoint: '/installation/repositories',
177
- params: { per_page: '100' },
178
- });
179
- return response.data;
180
- }
181
- /**
182
- * Get the GitHub App installation ID from a connection.
183
- * The installation ID is stored in connection_config.installation_id
184
- */
185
- async getGithubAppInstallationId(connectionId) {
186
- try {
187
- const connection = await this.client.getConnection(NANGO_INTEGRATIONS.GITHUB_APP, connectionId);
188
- // Extract installation_id from connection_config (where Nango stores it for GitHub App OAuth)
189
- const connectionConfig = connection.connection_config;
190
- if (connectionConfig?.installation_id) {
191
- return Number(connectionConfig.installation_id);
192
- }
193
- console.warn('[nango] No installation_id in connection_config');
194
- return null;
195
- }
196
- catch (err) {
197
- console.error('[nango] Failed to get installation ID:', err);
198
- return null;
199
- }
200
- }
201
- /**
202
- * Create an issue via Nango Proxy.
203
- */
204
- async createGithubIssue(connectionId, owner, repo, data) {
205
- const response = await this.client.post({
206
- connectionId,
207
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_APP,
208
- endpoint: `/repos/${owner}/${repo}/issues`,
209
- data,
210
- });
211
- return response.data;
212
- }
213
- /**
214
- * Create a pull request via Nango Proxy.
215
- */
216
- async createGithubPullRequest(connectionId, owner, repo, data) {
217
- const response = await this.client.post({
218
- connectionId,
219
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_APP,
220
- endpoint: `/repos/${owner}/${repo}/pulls`,
221
- data,
222
- });
223
- return response.data;
224
- }
225
- /**
226
- * Add a comment to an issue via Nango Proxy.
227
- */
228
- async addGithubIssueComment(connectionId, owner, repo, issueNumber, body) {
229
- const response = await this.client.post({
230
- connectionId,
231
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_APP,
232
- endpoint: `/repos/${owner}/${repo}/issues/${issueNumber}/comments`,
233
- data: { body },
234
- });
235
- return response.data;
236
- }
237
- /**
238
- * Update connection end user metadata (e.g., after creating a user record).
239
- */
240
- async updateEndUser(connectionId, providerConfigKey, endUser) {
241
- await this.client.patchConnection({ connectionId, provider_config_key: providerConfigKey }, { end_user: endUser });
242
- }
243
- /**
244
- * Delete a connection from Nango.
245
- *
246
- * Used to remove temporary session connections for returning users
247
- * to prevent duplicate connections in Nango. In the two-connection pattern,
248
- * new users get a permanent connection but returning users authenticate
249
- * with a temporary one that gets deleted.
250
- *
251
- * @param connectionId - Nango connection ID to delete
252
- * @param providerConfigKey - The integration key (e.g., 'github')
253
- */
254
- async deleteConnection(connectionId, providerConfigKey) {
255
- await this.client.deleteConnection(providerConfigKey, connectionId);
256
- }
257
- /**
258
- * Get connection metadata including end_user info.
259
- * Useful when webhook doesn't include end_user data.
260
- */
261
- async getConnection(connectionId, providerConfigKey) {
262
- const connection = await this.client.getConnection(providerConfigKey, connectionId);
263
- return connection;
264
- }
265
- /**
266
- * Check if user has access to a specific GitHub repository.
267
- * Uses the user's OAuth connection to query GitHub API.
268
- * @param connectionId - User's Nango connection ID (github user OAuth)
269
- * @param owner - Repository owner
270
- * @param repo - Repository name
271
- * @returns Access details or null if no access
272
- */
273
- async checkUserRepoAccess(connectionId, owner, repo) {
274
- try {
275
- const response = await this.client.get({
276
- connectionId,
277
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_USER,
278
- endpoint: `/repos/${owner}/${repo}`,
279
- });
280
- const data = response.data;
281
- let permission = 'none';
282
- if (data.permissions) {
283
- if (data.permissions.admin) {
284
- permission = 'admin';
285
- }
286
- else if (data.permissions.push) {
287
- permission = 'write';
288
- }
289
- else if (data.permissions.pull) {
290
- permission = 'read';
291
- }
292
- }
293
- return {
294
- hasAccess: true,
295
- permission,
296
- repository: {
297
- id: data.id,
298
- fullName: data.full_name,
299
- isPrivate: data.private,
300
- defaultBranch: data.default_branch,
301
- },
302
- };
303
- }
304
- catch (err) {
305
- // 404 = no access or repo doesn't exist
306
- const error = err;
307
- if (error.response?.status === 404 || error.response?.status === 403) {
308
- return { hasAccess: false };
309
- }
310
- console.error('[nango] checkUserRepoAccess error:', err);
311
- throw err;
312
- }
313
- }
314
- /**
315
- * List all repositories the user has access to via their OAuth connection.
316
- * Uses the user's personal OAuth token (not the GitHub App).
317
- * @param connectionId - User's Nango connection ID (github user OAuth)
318
- * @param options - Pagination and filter options
319
- * @returns List of accessible repositories
320
- */
321
- async listUserAccessibleRepos(connectionId, options) {
322
- const page = options?.page ?? 1;
323
- const perPage = options?.perPage ?? 100;
324
- const type = options?.type ?? 'all';
325
- const sort = options?.sort ?? 'updated';
326
- const response = await this.client.get({
327
- connectionId,
328
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_USER,
329
- endpoint: '/user/repos',
330
- params: {
331
- page: String(page),
332
- per_page: String(perPage),
333
- type,
334
- sort,
335
- direction: 'desc',
336
- },
337
- });
338
- const repos = response.data || [];
339
- return {
340
- repositories: repos.map(r => ({
341
- id: r.id,
342
- fullName: r.full_name,
343
- isPrivate: r.private,
344
- defaultBranch: r.default_branch,
345
- permissions: r.permissions || { admin: false, push: false, pull: false },
346
- })),
347
- hasMore: repos.length === perPage,
348
- };
349
- }
350
- /**
351
- * List collaborators for a repository via Nango Proxy.
352
- * Uses the GitHub App connection to access repository collaborators.
353
- * @param connectionId - GitHub App connection ID
354
- * @param owner - Repository owner
355
- * @param repo - Repository name
356
- * @returns List of collaborators with their permissions
357
- */
358
- async listRepoCollaborators(connectionId, owner, repo) {
359
- try {
360
- const response = await this.client.get({
361
- connectionId,
362
- providerConfigKey: NANGO_INTEGRATIONS.GITHUB_APP,
363
- endpoint: `/repos/${owner}/${repo}/collaborators`,
364
- params: { per_page: '100' },
365
- });
366
- return (response.data || []).map(collab => {
367
- let permission = 'none';
368
- if (collab.permissions) {
369
- if (collab.permissions.admin) {
370
- permission = 'admin';
371
- }
372
- else if (collab.permissions.push) {
373
- permission = 'write';
374
- }
375
- else if (collab.permissions.pull) {
376
- permission = 'read';
377
- }
378
- }
379
- return {
380
- id: collab.id,
381
- login: collab.login,
382
- avatarUrl: collab.avatar_url,
383
- permission,
384
- };
385
- });
386
- }
387
- catch (err) {
388
- const error = err;
389
- // 403 = no permission to view collaborators, 404 = repo not found
390
- if (error.response?.status === 403 || error.response?.status === 404) {
391
- console.warn(`[nango] Cannot list collaborators for ${owner}/${repo}: status ${error.response.status}`);
392
- return [];
393
- }
394
- console.error('[nango] listRepoCollaborators error:', err);
395
- throw err;
396
- }
397
- }
398
- /**
399
- * Verify webhook signature sent by Nango.
400
- * Uses the new verifyIncomingWebhookRequest method.
401
- * @see https://nango.dev/docs/reference/sdks/node#verify-webhook-signature
402
- */
403
- verifyWebhookSignature(rawBody, headers) {
404
- try {
405
- // Use the new method: verifyIncomingWebhookRequest(body, headers)
406
- return this.client.verifyIncomingWebhookRequest(rawBody, headers);
407
- }
408
- catch (err) {
409
- console.error('[nango] verifyIncomingWebhookRequest error:', err);
410
- // Fall back to manual HMAC verification using the secret key
411
- const signature = headers['x-nango-signature'];
412
- const hmacSha256 = headers['x-nango-hmac-sha256'];
413
- if (!signature && !hmacSha256)
414
- return false;
415
- const expectedSignature = crypto
416
- .createHmac('sha256', this.secret)
417
- .update(rawBody)
418
- .digest('hex');
419
- return signature === expectedSignature || hmacSha256 === expectedSignature;
420
- }
421
- }
422
- }
423
- export const nangoService = new NangoService();
424
- //# sourceMappingURL=nango.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nango.js","sourceRoot":"","sources":["../../src/services/nango.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,QAAQ;IACrB,UAAU,EAAE,kBAAkB;CACtB,CAAC;AASX,MAAM,YAAY;IACR,OAAO,GAAiB,IAAI,CAAC;IAC7B,OAAO,GAAkB,IAAI,CAAC;IAEtC,kFAAkF;IAClF,IAAY,MAAM;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC;gBACvB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;gBACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAY,MAAM;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,mBAA6B,EAAE,OAAuC;QAC/F,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YACtD,oBAAoB,EAAE,mBAAmB;YACzC,QAAQ,EAAE;gBACR,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAoB;YACxD,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,WAAW;YACjD,QAAQ,EAAE,OAAO;SAClB,CAAqC,CAAC;QACvC,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QAM5C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAKlC;gBACF,YAAY;gBACZ,iBAAiB,EAAE,kBAAkB,CAAC,WAAW;gBACjD,QAAQ,EAAE,cAAc;aACzB,CAKE,CAAC;YACJ,OAAO,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,8CAA8C;YAC9C,MAAM,KAAK,GAAG,GAAyC,CAAC;YACxD,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;gBACvF,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CAAC,YAAoB;QAC1C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACtC,kBAAkB,CAAC,UAAU,EAC7B,YAAY,EACZ,KAAK,EACL,IAAI,CACL,CAAC;YAEF,6CAA6C;YAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;YAED,+CAA+C;YAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,KAAkD,CAAC;gBACpE,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;oBAC1B,OAAO,QAAQ,CAAC,YAAY,CAAC;gBAC/B,CAAC;gBACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO,QAAQ,CAAC,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,KAAK,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,+CAA+C;YAC/C,MAAM,KAAK,GAAG,GAA0D,CAAC;YACzE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;YACtD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,YAAY,+BAA+B,CAAC,CAAC;YACnG,CAAC;YACD,gCAAgC;YAChC,MAAM,IAAI,KAAK,CAAC,mCAAoC,GAAa,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,uBAAuB,CAAC,YAAoB;QAChD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAChG,MAAM,UAAU,GAAI,UAA8D,CAAC,iBAAiB,CAAC;YAErG,2EAA2E;YAC3E,MAAM,eAAe,GAAG,UAAU,EAAE,eAAwD,CAAC;YAC7F,IAAI,eAAe,EAAE,YAAY,IAAI,OAAO,eAAe,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACtF,OAAO,eAAe,CAAC,YAAY,CAAC;YACtC,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACtC,kBAAkB,CAAC,WAAW,EAC9B,YAAY,CACb,CAAC;QAEF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,KAAkD,CAAC;YACpE,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC1B,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC/B,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuG;YAC3I,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,UAAU;YAChD,QAAQ,EAAE,4BAA4B;YACtC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC5B,CAAwH,CAAC;QAC1H,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,0BAA0B,CAAC,YAAoB;QACnD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAChG,8FAA8F;YAC9F,MAAM,gBAAgB,GAAI,UAA8D,CAAC,iBAAiB,CAAC;YAC3G,IAAI,gBAAgB,EAAE,eAAe,EAAE,CAAC;gBACtC,OAAO,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,YAAoB,EACpB,KAAa,EACb,IAAY,EACZ,IAAyD;QAEzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuC;YAC5E,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,UAAU;YAChD,QAAQ,EAAE,UAAU,KAAK,IAAI,IAAI,SAAS;YAC1C,IAAI;SACL,CAAwD,CAAC;QAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,YAAoB,EACpB,KAAa,EACb,IAAY,EACZ,IAAkE;QAElE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuC;YAC5E,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,UAAU;YAChD,QAAQ,EAAE,UAAU,KAAK,IAAI,IAAI,QAAQ;YACzC,IAAI;SACL,CAAwD,CAAC;QAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,YAAoB,EACpB,KAAa,EACb,IAAY,EACZ,WAAmB,EACnB,IAAY;QAEZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAmC;YACxE,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,UAAU;YAChD,QAAQ,EAAE,UAAU,KAAK,IAAI,IAAI,WAAW,WAAW,WAAW;YAClE,IAAI,EAAE,EAAE,IAAI,EAAE;SACf,CAAoD,CAAC;QACtD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB,EAAE,iBAAyB,EAAE,OAAuC;QAC1G,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC/B,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,EACxD,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAoB,EAAE,iBAAyB;QACpE,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB,EAAE,iBAAyB;QAOjE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACpF,OAAO,UAMN,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAoB,EAAE,KAAa,EAAE,IAAY;QAUzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAUnC;gBACD,YAAY;gBACZ,iBAAiB,EAAE,kBAAkB,CAAC,WAAW;gBACjD,QAAQ,EAAE,UAAU,KAAK,IAAI,IAAI,EAAE;aACpC,CAUC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,UAAU,GAAwC,MAAM,CAAC;YAE7D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;oBAC3B,UAAU,GAAG,OAAO,CAAC;gBACvB,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;oBACjC,UAAU,GAAG,OAAO,CAAC;gBACvB,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;oBACjC,UAAU,GAAG,MAAM,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,UAAU;gBACV,UAAU,EAAE;oBACV,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,QAAQ,EAAE,IAAI,CAAC,SAAS;oBACxB,SAAS,EAAE,IAAI,CAAC,OAAO;oBACvB,aAAa,EAAE,IAAI,CAAC,cAAc;iBACnC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,wCAAwC;YACxC,MAAM,KAAK,GAAG,GAAyC,CAAC;YACxD,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;YACzD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAAC,YAAoB,EAAE,OAKnD;QAcC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;QAExC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAUlC;YACF,YAAY;YACZ,iBAAiB,EAAE,kBAAkB,CAAC,WAAW;YACjD,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;gBAClB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;gBACzB,IAAI;gBACJ,IAAI;gBACJ,SAAS,EAAE,MAAM;aAClB;SACF,CAUE,CAAC;QAEJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAElC,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,CAAC,CAAC,SAAS;gBACrB,SAAS,EAAE,CAAC,CAAC,OAAO;gBACpB,aAAa,EAAE,CAAC,CAAC,cAAc;gBAC/B,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;aACzE,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,OAAO;SAClC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,qBAAqB,CAAC,YAAoB,EAAE,KAAa,EAAE,IAAY;QAM3E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAYlC;gBACF,YAAY;gBACZ,iBAAiB,EAAE,kBAAkB,CAAC,UAAU;gBAChD,QAAQ,EAAE,UAAU,KAAK,IAAI,IAAI,gBAAgB;gBACjD,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;aAC5B,CAYE,CAAC;YAEJ,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACxC,IAAI,UAAU,GAAwC,MAAM,CAAC;gBAC7D,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;wBAC7B,UAAU,GAAG,OAAO,CAAC;oBACvB,CAAC;yBAAM,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;wBACnC,UAAU,GAAG,OAAO,CAAC;oBACvB,CAAC;yBAAM,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;wBACnC,UAAU,GAAG,MAAM,CAAC;oBACtB,CAAC;gBACH,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,SAAS,EAAE,MAAM,CAAC,UAAU;oBAC5B,UAAU;iBACX,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAyC,CAAC;YACxD,kEAAkE;YAClE,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,yCAAyC,KAAK,IAAI,IAAI,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxG,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,sBAAsB,CAAC,OAAe,EAAE,OAAsD;QAC5F,IAAI,CAAC;YACH,kEAAkE;YAClE,OAAO,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAkC,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;YAClE,6DAA6D;YAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAuB,CAAC;YACrE,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAuB,CAAC;YACxE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YAE5C,MAAM,iBAAiB,GAAG,MAAM;iBAC7B,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;iBACjC,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,SAAS,KAAK,iBAAiB,IAAI,UAAU,KAAK,iBAAiB,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -1,131 +0,0 @@
1
- /**
2
- * Cloud Persistence Service
3
- *
4
- * Handles durable persistence of agent session data for cloud deployments.
5
- * Subscribes to wrapper events ('summary', 'session-end') and persists
6
- * to PostgreSQL via Drizzle ORM.
7
- *
8
- * This decouples wrappers from storage concerns - the wrapper emits events,
9
- * this service handles persistence. Different storage backends can be swapped
10
- * by implementing alternative persistence services.
11
- *
12
- * @see RelayPtyOrchestratorEvents in src/wrapper/relay-pty-orchestrator.ts for event definitions
13
- */
14
- import type { RelayPtyOrchestrator } from '@agent-relay/wrapper';
15
- /**
16
- * Configuration for CloudPersistenceService
17
- */
18
- export interface CloudPersistenceConfig {
19
- /** Workspace ID for scoping sessions */
20
- workspaceId: string;
21
- /** Optional callback when summary is persisted */
22
- onSummaryPersisted?: (agentName: string, summaryId: string) => void;
23
- /** Optional callback when session ends */
24
- onSessionEnded?: (agentName: string, sessionId: string) => void;
25
- }
26
- /**
27
- * CloudPersistenceService manages durable storage for agent sessions.
28
- *
29
- * Usage:
30
- * ```typescript
31
- * const persistence = new CloudPersistenceService({
32
- * workspaceId: 'workspace-123',
33
- * });
34
- *
35
- * // Bind to a RelayPtyOrchestrator instance
36
- * const pty = new RelayPtyOrchestrator(config);
37
- * const sessionId = await persistence.bindToWrapper(pty);
38
- *
39
- * // When done, unbind to clean up listeners
40
- * persistence.unbindFromWrapper(pty);
41
- * ```
42
- */
43
- export declare class CloudPersistenceService {
44
- private config;
45
- private boundWrappers;
46
- constructor(config: CloudPersistenceConfig);
47
- /**
48
- * Bind to a RelayPtyOrchestrator instance and start persisting its events.
49
- * Creates a new agent session record and returns the session ID.
50
- *
51
- * @param wrapper The RelayPtyOrchestrator to bind to
52
- * @returns The session ID for this agent session
53
- */
54
- bindToRelayPtyOrchestrator(wrapper: RelayPtyOrchestrator): Promise<string>;
55
- /**
56
- * Unbind from a RelayPtyOrchestrator and clean up event listeners.
57
- *
58
- * @param wrapper The RelayPtyOrchestrator to unbind from
59
- */
60
- unbindFromRelayPtyOrchestrator(wrapper: RelayPtyOrchestrator): void;
61
- /**
62
- * Handle a summary event - persist to agent_summaries table.
63
- */
64
- private handleSummary;
65
- /**
66
- * Handle a session-end event - update agent_sessions with end marker.
67
- */
68
- private handleSessionEnd;
69
- /**
70
- * Get the session ID for a bound wrapper.
71
- */
72
- getSessionId(wrapper: RelayPtyOrchestrator): string | undefined;
73
- /**
74
- * Get all summaries for a session.
75
- */
76
- getSessionSummaries(sessionId: string): Promise<{
77
- id: string;
78
- sessionId: string;
79
- agentName: string;
80
- summary: {
81
- currentTask?: string;
82
- completedTasks?: string[];
83
- decisions?: string[];
84
- context?: string;
85
- files?: string[];
86
- };
87
- createdAt: Date;
88
- }[]>;
89
- /**
90
- * Get the latest summary for an agent in THIS workspace.
91
- * Joins through agent_sessions to ensure workspace scoping.
92
- */
93
- getLatestSummary(agentName: string): Promise<{
94
- id: string;
95
- sessionId: string;
96
- agentName: string;
97
- summary: {
98
- currentTask?: string;
99
- completedTasks?: string[];
100
- decisions?: string[];
101
- context?: string;
102
- files?: string[];
103
- };
104
- createdAt: Date;
105
- }>;
106
- /**
107
- * Get active sessions for a workspace.
108
- */
109
- getActiveSessions(): Promise<{
110
- id: string;
111
- workspaceId: string;
112
- agentName: string;
113
- status: string;
114
- startedAt: Date;
115
- endedAt: Date | null;
116
- endMarker: {
117
- summary?: string;
118
- completedTasks?: string[];
119
- } | null;
120
- metadata: unknown;
121
- }[]>;
122
- /**
123
- * Clean up all bindings.
124
- */
125
- destroy(): void;
126
- }
127
- /**
128
- * Factory function to create a persistence service for a workspace.
129
- */
130
- export declare function createPersistenceService(workspaceId: string): CloudPersistenceService;
131
- //# sourceMappingURL=persistence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/services/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKjE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,0CAA0C;IAC1C,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,aAAa,CAIhB;gBAEO,MAAM,EAAE,sBAAsB;IAI1C;;;;;;OAMG;IACG,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0ChF;;;;OAIG;IACH,8BAA8B,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAWnE;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,GAAG,SAAS;IAI/D;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;IAQ3C;;;OAGG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;IAqBxC;;OAEG;IACG,iBAAiB;;;;;;;;;;;;;IAUvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAErF"}