@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,388 +0,0 @@
1
- /**
2
- * Agent Relay Cloud - Billing Service
3
- *
4
- * Stripe integration for subscription management, payments, and webhooks.
5
- */
6
- import Stripe from 'stripe';
7
- import { getConfig } from '../config.js';
8
- import { getPlan } from './plans.js';
9
- let stripeClient = null;
10
- /**
11
- * Get or create Stripe client
12
- */
13
- function getStripe() {
14
- if (!stripeClient) {
15
- const config = getConfig();
16
- stripeClient = new Stripe(config.stripe.secretKey);
17
- }
18
- return stripeClient;
19
- }
20
- /**
21
- * Billing Service
22
- */
23
- export class BillingService {
24
- stripe;
25
- constructor() {
26
- this.stripe = getStripe();
27
- }
28
- /**
29
- * Create or get a Stripe customer for a user
30
- */
31
- async getOrCreateCustomer(userId, email, name) {
32
- // Search for existing customer by metadata
33
- const existing = await this.stripe.customers.search({
34
- query: `metadata['user_id']:'${userId}'`,
35
- limit: 1,
36
- });
37
- if (existing.data.length > 0) {
38
- return existing.data[0].id;
39
- }
40
- // Create new customer
41
- const customer = await this.stripe.customers.create({
42
- email,
43
- name,
44
- metadata: {
45
- user_id: userId,
46
- },
47
- });
48
- return customer.id;
49
- }
50
- /**
51
- * Get customer details including subscription
52
- */
53
- async getCustomer(stripeCustomerId) {
54
- try {
55
- const customer = await this.stripe.customers.retrieve(stripeCustomerId, {
56
- expand: ['subscriptions', 'invoice_settings.default_payment_method'],
57
- });
58
- if (customer.deleted) {
59
- return null;
60
- }
61
- // Get payment methods
62
- const paymentMethods = await this.stripe.paymentMethods.list({
63
- customer: stripeCustomerId,
64
- type: 'card',
65
- });
66
- // Get recent invoices
67
- const invoices = await this.stripe.invoices.list({
68
- customer: stripeCustomerId,
69
- limit: 10,
70
- });
71
- const subscription = customer.subscriptions?.data[0];
72
- return {
73
- id: customer.metadata?.user_id || '',
74
- stripeCustomerId,
75
- email: customer.email || '',
76
- name: customer.name || undefined,
77
- subscription: subscription ? this.mapSubscription(subscription) : undefined,
78
- paymentMethods: paymentMethods.data.map((pm) => this.mapPaymentMethod(pm)),
79
- invoices: invoices.data.map((inv) => this.mapInvoice(inv)),
80
- createdAt: new Date(customer.created * 1000),
81
- updatedAt: new Date(),
82
- };
83
- }
84
- catch (error) {
85
- if (error.code === 'resource_missing') {
86
- return null;
87
- }
88
- throw error;
89
- }
90
- }
91
- /**
92
- * Create a checkout session for subscription
93
- */
94
- async createCheckoutSession(customerId, tier, billingInterval, successUrl, cancelUrl) {
95
- const config = getConfig();
96
- // Validate tier exists
97
- getPlan(tier);
98
- // Get the appropriate price ID
99
- let priceId;
100
- if (billingInterval === 'month') {
101
- priceId = config.stripe.priceIds[`${tier}Monthly`];
102
- }
103
- else {
104
- priceId = config.stripe.priceIds[`${tier}Yearly`];
105
- }
106
- if (!priceId) {
107
- throw new Error(`No price configured for ${tier} ${billingInterval}ly plan`);
108
- }
109
- const session = await this.stripe.checkout.sessions.create({
110
- customer: customerId,
111
- payment_method_types: ['card'],
112
- mode: 'subscription',
113
- line_items: [
114
- {
115
- price: priceId,
116
- quantity: 1,
117
- },
118
- ],
119
- success_url: successUrl,
120
- cancel_url: cancelUrl,
121
- subscription_data: {
122
- metadata: {
123
- tier,
124
- },
125
- },
126
- allow_promotion_codes: true,
127
- });
128
- return {
129
- sessionId: session.id,
130
- url: session.url,
131
- };
132
- }
133
- /**
134
- * Create a billing portal session for managing subscription
135
- */
136
- async createPortalSession(customerId, returnUrl) {
137
- const session = await this.stripe.billingPortal.sessions.create({
138
- customer: customerId,
139
- return_url: returnUrl,
140
- });
141
- return {
142
- url: session.url,
143
- };
144
- }
145
- /**
146
- * Change subscription tier
147
- */
148
- async changeSubscription(subscriptionId, newTier, billingInterval) {
149
- const config = getConfig();
150
- // Get new price ID
151
- let priceId;
152
- if (billingInterval === 'month') {
153
- priceId = config.stripe.priceIds[`${newTier}Monthly`];
154
- }
155
- else {
156
- priceId = config.stripe.priceIds[`${newTier}Yearly`];
157
- }
158
- if (!priceId) {
159
- throw new Error(`No price configured for ${newTier} ${billingInterval}ly plan`);
160
- }
161
- // Get current subscription
162
- const subscription = await this.stripe.subscriptions.retrieve(subscriptionId);
163
- const currentItem = subscription.items.data[0];
164
- // Update subscription
165
- const updated = await this.stripe.subscriptions.update(subscriptionId, {
166
- items: [
167
- {
168
- id: currentItem.id,
169
- price: priceId,
170
- },
171
- ],
172
- metadata: {
173
- tier: newTier,
174
- },
175
- proration_behavior: 'create_prorations',
176
- });
177
- return this.mapSubscription(updated);
178
- }
179
- /**
180
- * Cancel subscription at period end
181
- */
182
- async cancelSubscription(subscriptionId) {
183
- const subscription = await this.stripe.subscriptions.update(subscriptionId, {
184
- cancel_at_period_end: true,
185
- });
186
- return this.mapSubscription(subscription);
187
- }
188
- /**
189
- * Resume a canceled subscription
190
- */
191
- async resumeSubscription(subscriptionId) {
192
- const subscription = await this.stripe.subscriptions.update(subscriptionId, {
193
- cancel_at_period_end: false,
194
- });
195
- return this.mapSubscription(subscription);
196
- }
197
- /**
198
- * Add a payment method to customer
199
- */
200
- async addPaymentMethod(customerId, paymentMethodId, setAsDefault = false) {
201
- // Attach payment method to customer
202
- const pm = await this.stripe.paymentMethods.attach(paymentMethodId, {
203
- customer: customerId,
204
- });
205
- // Set as default if requested
206
- if (setAsDefault) {
207
- await this.stripe.customers.update(customerId, {
208
- invoice_settings: {
209
- default_payment_method: paymentMethodId,
210
- },
211
- });
212
- }
213
- return this.mapPaymentMethod(pm, setAsDefault);
214
- }
215
- /**
216
- * Remove a payment method
217
- */
218
- async removePaymentMethod(paymentMethodId) {
219
- await this.stripe.paymentMethods.detach(paymentMethodId);
220
- }
221
- /**
222
- * Set default payment method
223
- */
224
- async setDefaultPaymentMethod(customerId, paymentMethodId) {
225
- await this.stripe.customers.update(customerId, {
226
- invoice_settings: {
227
- default_payment_method: paymentMethodId,
228
- },
229
- });
230
- }
231
- /**
232
- * Get upcoming invoice preview
233
- */
234
- async getUpcomingInvoice(customerId) {
235
- try {
236
- const invoice = await this.stripe.invoices.retrieveUpcoming({
237
- customer: customerId,
238
- });
239
- return this.mapInvoice(invoice);
240
- }
241
- catch (error) {
242
- if (error.code === 'invoice_upcoming_none') {
243
- return null;
244
- }
245
- throw error;
246
- }
247
- }
248
- /**
249
- * Record usage for metered billing
250
- */
251
- async recordUsage(subscriptionItemId, quantity, timestamp) {
252
- await this.stripe.subscriptionItems.createUsageRecord(subscriptionItemId, {
253
- quantity,
254
- timestamp: timestamp ? Math.floor(timestamp.getTime() / 1000) : undefined,
255
- action: 'increment',
256
- });
257
- }
258
- /**
259
- * Verify webhook signature
260
- */
261
- verifyWebhookSignature(payload, signature) {
262
- const config = getConfig();
263
- return this.stripe.webhooks.constructEvent(payload, signature, config.stripe.webhookSecret);
264
- }
265
- /**
266
- * Process webhook event
267
- */
268
- async processWebhookEvent(event) {
269
- const billingEvent = {
270
- id: event.id,
271
- type: this.mapEventType(event.type),
272
- stripeEventId: event.id,
273
- data: event.data.object,
274
- createdAt: new Date(event.created * 1000),
275
- };
276
- // Extract user ID from customer metadata if available
277
- if ('customer' in event.data.object) {
278
- const customerId = event.data.object.customer;
279
- if (customerId) {
280
- try {
281
- const customer = await this.stripe.customers.retrieve(customerId);
282
- if (!customer.deleted && customer.metadata?.user_id) {
283
- billingEvent.userId = customer.metadata.user_id;
284
- }
285
- }
286
- catch {
287
- // Customer not found, continue without user ID
288
- }
289
- }
290
- }
291
- billingEvent.processedAt = new Date();
292
- return billingEvent;
293
- }
294
- /**
295
- * Get subscription tier from Stripe subscription
296
- */
297
- getTierFromSubscription(subscription) {
298
- // Check metadata first
299
- if (subscription.metadata?.tier) {
300
- return subscription.metadata.tier;
301
- }
302
- // Fallback: determine from price ID
303
- const config = getConfig();
304
- const priceId = subscription.items.data[0]?.price.id;
305
- for (const [key, value] of Object.entries(config.stripe.priceIds)) {
306
- if (value === priceId) {
307
- // Extract tier from key (e.g., 'proMonthly' -> 'pro')
308
- return key.replace(/(Monthly|Yearly)$/, '').toLowerCase();
309
- }
310
- }
311
- return 'free'; // Default fallback
312
- }
313
- // Helper: Map Stripe subscription to our type
314
- mapSubscription(subscription) {
315
- const sub = subscription;
316
- return {
317
- id: subscription.id,
318
- stripeSubscriptionId: subscription.id,
319
- tier: this.getTierFromSubscription(subscription),
320
- status: subscription.status,
321
- currentPeriodStart: new Date((sub.current_period_start || sub.billing_cycle_anchor) * 1000),
322
- currentPeriodEnd: new Date((sub.current_period_end || sub.current_period_start + 30 * 24 * 60 * 60) * 1000),
323
- cancelAtPeriodEnd: subscription.cancel_at_period_end,
324
- billingInterval: subscription.items.data[0]?.price.recurring?.interval === 'year'
325
- ? 'year'
326
- : 'month',
327
- createdAt: new Date(subscription.created * 1000),
328
- };
329
- }
330
- // Helper: Map Stripe payment method to our type
331
- mapPaymentMethod(pm, isDefault = false) {
332
- return {
333
- id: pm.id,
334
- stripePaymentMethodId: pm.id,
335
- type: pm.type,
336
- isDefault,
337
- card: pm.card
338
- ? {
339
- brand: pm.card.brand,
340
- last4: pm.card.last4,
341
- expMonth: pm.card.exp_month,
342
- expYear: pm.card.exp_year,
343
- }
344
- : undefined,
345
- };
346
- }
347
- // Helper: Map Stripe invoice to our type
348
- mapInvoice(invoice) {
349
- const isUpcoming = !('id' in invoice) || invoice.id === null;
350
- return {
351
- id: isUpcoming ? 'upcoming' : invoice.id,
352
- stripeInvoiceId: isUpcoming ? 'upcoming' : invoice.id,
353
- amountDue: invoice.amount_due,
354
- amountPaid: invoice.amount_paid,
355
- status: isUpcoming ? 'draft' : invoice.status,
356
- invoicePdf: 'invoice_pdf' in invoice ? invoice.invoice_pdf ?? undefined : undefined,
357
- hostedInvoiceUrl: 'hosted_invoice_url' in invoice ? invoice.hosted_invoice_url ?? undefined : undefined,
358
- periodStart: new Date(invoice.period_start * 1000),
359
- periodEnd: new Date(invoice.period_end * 1000),
360
- createdAt: new Date((invoice.created || Date.now() / 1000) * 1000),
361
- };
362
- }
363
- // Helper: Map Stripe event type to our type
364
- mapEventType(stripeType) {
365
- const mapping = {
366
- 'customer.subscription.created': 'subscription.created',
367
- 'customer.subscription.updated': 'subscription.updated',
368
- 'customer.subscription.deleted': 'subscription.canceled',
369
- 'customer.subscription.trial_will_end': 'subscription.trial_ending',
370
- 'invoice.paid': 'invoice.paid',
371
- 'invoice.payment_failed': 'invoice.payment_failed',
372
- 'payment_method.attached': 'payment_method.attached',
373
- 'payment_method.detached': 'payment_method.detached',
374
- 'customer.created': 'customer.created',
375
- 'customer.updated': 'customer.updated',
376
- };
377
- return mapping[stripeType] || 'customer.updated';
378
- }
379
- }
380
- // Export singleton instance
381
- let billingService = null;
382
- export function getBillingService() {
383
- if (!billingService) {
384
- billingService = new BillingService();
385
- }
386
- return billingService;
387
- }
388
- //# sourceMappingURL=service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/billing/service.ts"],"names":[],"mappings":"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"}
@@ -1,141 +0,0 @@
1
- /**
2
- * Agent Relay Cloud - Billing Types
3
- *
4
- * Defines subscription plans, customer data, and billing events.
5
- */
6
- /**
7
- * Subscription tier levels
8
- */
9
- export type SubscriptionTier = 'free' | 'pro' | 'team' | 'enterprise';
10
- /**
11
- * Plan definitions with limits and pricing
12
- */
13
- export interface BillingPlan {
14
- id: SubscriptionTier;
15
- name: string;
16
- description: string;
17
- priceMonthly: number;
18
- priceYearly: number;
19
- stripePriceIdMonthly?: string;
20
- stripePriceIdYearly?: string;
21
- limits: BillingPlanLimits;
22
- features: string[];
23
- }
24
- /**
25
- * Resource limits per plan for billing/display purposes.
26
- * These limits are shown to customers on pricing pages and in account settings.
27
- *
28
- * Note: For runtime limit checking (API enforcement), use PlanLimits from
29
- * src/cloud/services/planLimits.ts which has a focused subset of limits.
30
- */
31
- export interface BillingPlanLimits {
32
- maxWorkspaces: number;
33
- maxAgentsPerWorkspace: number;
34
- maxTeamMembers: number;
35
- maxStorageGB: number;
36
- maxComputeHoursPerMonth: number;
37
- customDomains: boolean;
38
- prioritySupport: boolean;
39
- sla: boolean;
40
- ssoEnabled: boolean;
41
- auditLogs: boolean;
42
- /** Cloud session persistence (summaries, session tracking) - Pro+ only */
43
- sessionPersistence: boolean;
44
- }
45
- /**
46
- * Customer billing information
47
- */
48
- export interface BillingCustomer {
49
- id: string;
50
- stripeCustomerId: string;
51
- email: string;
52
- name?: string;
53
- subscription?: CustomerSubscription;
54
- paymentMethods: PaymentMethod[];
55
- invoices: Invoice[];
56
- createdAt: Date;
57
- updatedAt: Date;
58
- }
59
- /**
60
- * Active subscription
61
- */
62
- export interface CustomerSubscription {
63
- id: string;
64
- stripeSubscriptionId: string;
65
- tier: SubscriptionTier;
66
- status: SubscriptionStatus;
67
- currentPeriodStart: Date;
68
- currentPeriodEnd: Date;
69
- cancelAtPeriodEnd: boolean;
70
- billingInterval: 'month' | 'year';
71
- createdAt: Date;
72
- }
73
- export type SubscriptionStatus = 'active' | 'past_due' | 'canceled' | 'incomplete' | 'trialing' | 'unpaid';
74
- /**
75
- * Payment method
76
- */
77
- export interface PaymentMethod {
78
- id: string;
79
- stripePaymentMethodId: string;
80
- type: 'card' | 'us_bank_account' | 'sepa_debit';
81
- isDefault: boolean;
82
- card?: {
83
- brand: string;
84
- last4: string;
85
- expMonth: number;
86
- expYear: number;
87
- };
88
- }
89
- /**
90
- * Invoice
91
- */
92
- export interface Invoice {
93
- id: string;
94
- stripeInvoiceId: string;
95
- amountDue: number;
96
- amountPaid: number;
97
- status: 'draft' | 'open' | 'paid' | 'void' | 'uncollectible';
98
- invoicePdf?: string;
99
- hostedInvoiceUrl?: string;
100
- periodStart: Date;
101
- periodEnd: Date;
102
- createdAt: Date;
103
- }
104
- /**
105
- * Usage record for metered billing
106
- */
107
- export interface UsageRecord {
108
- userId: string;
109
- workspaceId: string;
110
- metric: UsageMetric;
111
- quantity: number;
112
- timestamp: Date;
113
- }
114
- export type UsageMetric = 'compute_hours' | 'storage_gb' | 'api_calls' | 'agent_spawns';
115
- /**
116
- * Billing event for webhooks and audit
117
- */
118
- export interface BillingEvent {
119
- id: string;
120
- type: BillingEventType;
121
- userId?: string;
122
- stripeEventId?: string;
123
- data: Record<string, unknown>;
124
- processedAt?: Date;
125
- createdAt: Date;
126
- }
127
- export type BillingEventType = 'subscription.created' | 'subscription.updated' | 'subscription.canceled' | 'subscription.trial_ending' | 'invoice.paid' | 'invoice.payment_failed' | 'payment_method.attached' | 'payment_method.detached' | 'customer.created' | 'customer.updated';
128
- /**
129
- * Checkout session result
130
- */
131
- export interface CheckoutSession {
132
- sessionId: string;
133
- url: string;
134
- }
135
- /**
136
- * Portal session for managing subscription
137
- */
138
- export interface PortalSession {
139
- url: string;
140
- }
141
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/billing/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,gBAAgB,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,kBAAkB,EAAE,IAAI,CAAC;IACzB,gBAAgB,EAAE,IAAI,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,UAAU,GACV,UAAU,GACV,YAAY,GACZ,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,YAAY,GACZ,WAAW,GACX,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,sBAAsB,GACtB,uBAAuB,GACvB,2BAA2B,GAC3B,cAAc,GACd,wBAAwB,GACxB,yBAAyB,GACzB,yBAAyB,GACzB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Agent Relay Cloud - Billing Types
3
- *
4
- * Defines subscription plans, customer data, and billing events.
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/billing/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
package/dist/config.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * @deprecated Import from '@agent-relay/config/cloud-config' instead.
3
- */
4
- export * from '@agent-relay/config/cloud-config';
5
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,kCAAkC,CAAC"}
package/dist/config.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * @deprecated Import from '@agent-relay/config/cloud-config' instead.
3
- */
4
- export * from '@agent-relay/config/cloud-config';
5
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,kCAAkC,CAAC"}
@@ -1,89 +0,0 @@
1
- /**
2
- * Bulk Ingest Utilities
3
- *
4
- * Optimized bulk insert operations for high-volume message sync.
5
- * Uses raw SQL for performance instead of ORM-generated queries.
6
- *
7
- * Key optimizations:
8
- * - Multi-row INSERT with VALUES for batches
9
- * - Streaming COPY for very large batches (>1000 rows)
10
- * - Proper JSONB serialization
11
- * - Connection reuse via pool
12
- * - Chunk processing for memory efficiency
13
- */
14
- import { Pool } from 'pg';
15
- type NewAgentMessage = Record<string, unknown>;
16
- export interface PoolConfig {
17
- connectionString: string;
18
- /** Maximum number of connections in pool (default: 20) */
19
- max?: number;
20
- /** How long a client can be idle before being closed (default: 30000) */
21
- idleTimeoutMillis?: number;
22
- /** Max time to wait for a connection (default: 10000) */
23
- connectionTimeoutMillis?: number;
24
- /** Enable SSL (default: based on connection string) */
25
- ssl?: boolean | {
26
- rejectUnauthorized: boolean;
27
- };
28
- }
29
- export declare const DEFAULT_POOL_CONFIG: Partial<PoolConfig>;
30
- /**
31
- * Result of a bulk insert operation
32
- */
33
- export interface BulkInsertResult {
34
- inserted: number;
35
- duplicates: number;
36
- errors: number;
37
- durationMs: number;
38
- }
39
- /**
40
- * Bulk insert messages using optimized multi-row INSERT.
41
- *
42
- * Uses ON CONFLICT DO NOTHING for deduplication.
43
- * Much faster than individual inserts for batches.
44
- *
45
- * @param pool Database connection pool
46
- * @param messages Messages to insert
47
- * @param chunkSize Number of rows per INSERT statement (default: 100)
48
- */
49
- export declare function bulkInsertMessages(pool: Pool, messages: NewAgentMessage[], chunkSize?: number): Promise<BulkInsertResult>;
50
- /**
51
- * Streaming bulk insert using staging table for very large batches.
52
- *
53
- * Uses chunked multi-row INSERT into a temp staging table,
54
- * then a single INSERT SELECT for deduplication.
55
- * This avoids holding all data in memory and is efficient for large batches.
56
- *
57
- * @param pool Database connection pool
58
- * @param messages Messages to insert
59
- */
60
- export declare function streamingBulkInsert(pool: Pool, messages: NewAgentMessage[]): Promise<BulkInsertResult>;
61
- /**
62
- * Optimized bulk insert that chooses strategy based on batch size.
63
- *
64
- * - Small batches (<100): Use regular ORM insert
65
- * - Medium batches (100-1000): Use multi-row INSERT
66
- * - Large batches (>1000): Use streaming COPY
67
- *
68
- * @param pool Database connection pool
69
- * @param messages Messages to insert
70
- */
71
- export declare function optimizedBulkInsert(pool: Pool, messages: NewAgentMessage[]): Promise<BulkInsertResult>;
72
- /**
73
- * Get pool statistics for monitoring.
74
- */
75
- export declare function getPoolStats(pool: Pool): {
76
- total: number;
77
- idle: number;
78
- waiting: number;
79
- };
80
- /**
81
- * Health check for the connection pool.
82
- */
83
- export declare function checkPoolHealth(pool: Pool): Promise<{
84
- healthy: boolean;
85
- latencyMs: number;
86
- error?: string;
87
- }>;
88
- export {};
89
- //# sourceMappingURL=bulk-ingest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulk-ingest.d.ts","sourceRoot":"","sources":["../../src/db/bulk-ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAItC,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAG/C,MAAM,WAAW,UAAU;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,GAAG,CAAC,EAAE,OAAO,GAAG;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;CACjD;AAED,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAInD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,SAAM,GACd,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AA6ED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CA4E3B;AAiED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAMA;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAeD"}