@relayflows/sdk 2.0.15 → 2.0.17

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 (155) hide show
  1. package/dist/agent-artifacts.d.ts +20 -0
  2. package/dist/agent-artifacts.d.ts.map +1 -0
  3. package/dist/agent-artifacts.js +81 -0
  4. package/dist/agent-artifacts.js.map +1 -0
  5. package/dist/authored-flow-error.d.ts +1 -1
  6. package/dist/authored-flow-error.d.ts.map +1 -1
  7. package/dist/authored-flow-error.js.map +1 -1
  8. package/dist/authored-flow-executor.d.ts +3 -3
  9. package/dist/authored-flow-executor.d.ts.map +1 -1
  10. package/dist/authored-flow-executor.js +93 -7
  11. package/dist/authored-flow-executor.js.map +1 -1
  12. package/dist/authored-flow-lifecycle.d.ts +10 -0
  13. package/dist/authored-flow-lifecycle.d.ts.map +1 -1
  14. package/dist/authored-flow-lifecycle.js +7 -0
  15. package/dist/authored-flow-lifecycle.js.map +1 -1
  16. package/dist/authored-flow-operation.d.ts +11 -0
  17. package/dist/authored-flow-operation.d.ts.map +1 -1
  18. package/dist/authored-flow-operation.js +32 -7
  19. package/dist/authored-flow-operation.js.map +1 -1
  20. package/dist/authored-node-runner.d.ts.map +1 -1
  21. package/dist/authored-node-runner.js +37 -14
  22. package/dist/authored-node-runner.js.map +1 -1
  23. package/dist/authored-step-output.d.ts +2 -0
  24. package/dist/authored-step-output.d.ts.map +1 -1
  25. package/dist/authored-step-output.js +5 -1
  26. package/dist/authored-step-output.js.map +1 -1
  27. package/dist/authored-worker-step.d.ts.map +1 -1
  28. package/dist/authored-worker-step.js +15 -8
  29. package/dist/authored-worker-step.js.map +1 -1
  30. package/dist/cli/check-triggers.d.ts.map +1 -1
  31. package/dist/cli/check-triggers.js +10 -0
  32. package/dist/cli/check-triggers.js.map +1 -1
  33. package/dist/cli/check.d.ts +14 -0
  34. package/dist/cli/check.d.ts.map +1 -1
  35. package/dist/cli/check.js +6 -1
  36. package/dist/cli/check.js.map +1 -1
  37. package/dist/cli/cloud-deploy.d.ts +30 -0
  38. package/dist/cli/cloud-deploy.d.ts.map +1 -0
  39. package/dist/cli/cloud-deploy.js +162 -0
  40. package/dist/cli/cloud-deploy.js.map +1 -0
  41. package/dist/cli/cloud-run.d.ts +3 -1
  42. package/dist/cli/cloud-run.d.ts.map +1 -1
  43. package/dist/cli/cloud-run.js +37 -5
  44. package/dist/cli/cloud-run.js.map +1 -1
  45. package/dist/cli/cloud-schedule.d.ts +29 -0
  46. package/dist/cli/cloud-schedule.d.ts.map +1 -0
  47. package/dist/cli/cloud-schedule.js +131 -0
  48. package/dist/cli/cloud-schedule.js.map +1 -0
  49. package/dist/cli/cloud-sync.d.ts +13 -0
  50. package/dist/cli/cloud-sync.d.ts.map +1 -0
  51. package/dist/cli/cloud-sync.js +39 -0
  52. package/dist/cli/cloud-sync.js.map +1 -0
  53. package/dist/cli/direct-run.js +1 -1
  54. package/dist/cli/direct-run.js.map +1 -1
  55. package/dist/cli/run.d.ts +1 -1
  56. package/dist/cli/run.d.ts.map +1 -1
  57. package/dist/cli/run.js +17 -4
  58. package/dist/cli/run.js.map +1 -1
  59. package/dist/cli.d.ts.map +1 -1
  60. package/dist/cli.js +117 -12
  61. package/dist/cli.js.map +1 -1
  62. package/dist/cloud-deploy.d.ts +70 -0
  63. package/dist/cloud-deploy.d.ts.map +1 -0
  64. package/dist/cloud-deploy.js +192 -0
  65. package/dist/cloud-deploy.js.map +1 -0
  66. package/dist/cloud-http.d.ts +52 -2
  67. package/dist/cloud-http.d.ts.map +1 -1
  68. package/dist/cloud-http.js +135 -9
  69. package/dist/cloud-http.js.map +1 -1
  70. package/dist/cloud-run.d.ts +53 -0
  71. package/dist/cloud-run.d.ts.map +1 -1
  72. package/dist/cloud-run.js +97 -25
  73. package/dist/cloud-run.js.map +1 -1
  74. package/dist/cloud-schedule.d.ts +48 -0
  75. package/dist/cloud-schedule.d.ts.map +1 -0
  76. package/dist/cloud-schedule.js +125 -0
  77. package/dist/cloud-schedule.js.map +1 -0
  78. package/dist/cloud-sync.d.ts +66 -0
  79. package/dist/cloud-sync.d.ts.map +1 -0
  80. package/dist/cloud-sync.js +287 -0
  81. package/dist/cloud-sync.js.map +1 -0
  82. package/dist/failure-kinds.d.ts +10 -3
  83. package/dist/failure-kinds.d.ts.map +1 -1
  84. package/dist/failure-kinds.js +10 -0
  85. package/dist/failure-kinds.js.map +1 -1
  86. package/dist/index.d.ts +5 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +5 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/named-gate-lowering.js +9 -0
  91. package/dist/named-gate-lowering.js.map +1 -1
  92. package/dist/named-gates.d.ts +1 -1
  93. package/dist/named-gates.d.ts.map +1 -1
  94. package/dist/named-gates.js +11 -1
  95. package/dist/named-gates.js.map +1 -1
  96. package/dist/preflight.d.ts.map +1 -1
  97. package/dist/preflight.js +155 -9
  98. package/dist/preflight.js.map +1 -1
  99. package/dist/schedule-trigger.d.ts +35 -0
  100. package/dist/schedule-trigger.d.ts.map +1 -0
  101. package/dist/schedule-trigger.js +53 -0
  102. package/dist/schedule-trigger.js.map +1 -0
  103. package/dist/spec.d.ts +11 -1
  104. package/dist/spec.d.ts.map +1 -1
  105. package/dist/spec.js.map +1 -1
  106. package/dist/trigger-executor.js +1 -1
  107. package/dist/trigger-executor.js.map +1 -1
  108. package/dist/validate.js +1 -1
  109. package/dist/validate.js.map +1 -1
  110. package/dist/worker-cli.d.ts +10 -0
  111. package/dist/worker-cli.d.ts.map +1 -1
  112. package/dist/worker-cli.js +51 -22
  113. package/dist/worker-cli.js.map +1 -1
  114. package/dist/worker.d.ts.map +1 -1
  115. package/dist/worker.js +9 -0
  116. package/dist/worker.js.map +1 -1
  117. package/dist/wrapper-session.d.ts +3 -1
  118. package/dist/wrapper-session.d.ts.map +1 -1
  119. package/dist/wrapper-session.js +6 -3
  120. package/dist/wrapper-session.js.map +1 -1
  121. package/package.json +3 -3
  122. package/src/agent-artifacts.ts +76 -0
  123. package/src/authored-flow-error.ts +1 -0
  124. package/src/authored-flow-executor.ts +95 -8
  125. package/src/authored-flow-lifecycle.ts +7 -0
  126. package/src/authored-flow-operation.ts +35 -10
  127. package/src/authored-node-runner.ts +35 -13
  128. package/src/authored-step-output.ts +6 -1
  129. package/src/authored-worker-step.ts +16 -9
  130. package/src/cli/check-triggers.ts +9 -0
  131. package/src/cli/check.ts +21 -1
  132. package/src/cli/cloud-deploy.ts +157 -0
  133. package/src/cli/cloud-run.ts +37 -6
  134. package/src/cli/cloud-schedule.ts +135 -0
  135. package/src/cli/cloud-sync.ts +37 -0
  136. package/src/cli/direct-run.ts +1 -1
  137. package/src/cli/run.ts +18 -5
  138. package/src/cli.ts +107 -12
  139. package/src/cloud-deploy.ts +247 -0
  140. package/src/cloud-http.ts +173 -9
  141. package/src/cloud-run.ts +143 -24
  142. package/src/cloud-schedule.ts +158 -0
  143. package/src/cloud-sync.ts +315 -0
  144. package/src/failure-kinds.ts +10 -0
  145. package/src/index.ts +14 -0
  146. package/src/named-gate-lowering.ts +9 -0
  147. package/src/named-gates.ts +11 -1
  148. package/src/preflight.ts +132 -9
  149. package/src/schedule-trigger.ts +73 -0
  150. package/src/spec.ts +12 -1
  151. package/src/trigger-executor.ts +1 -1
  152. package/src/validate.ts +1 -1
  153. package/src/worker-cli.ts +41 -0
  154. package/src/worker.ts +9 -0
  155. package/src/wrapper-session.ts +5 -1
@@ -0,0 +1,192 @@
1
+ import { randomBytes, createHash } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { loadAuthoredFlow } from './authored-flow-loader.js';
4
+ import { CloudFlowError, cloudFetch, cloudRequest, isCloudRecord, } from './cloud-http.js';
5
+ /**
6
+ * Hosted listener deployment: the CLI form of the agentrelay.com onboarding's
7
+ * deploy wizard. `POST /api/v1/flows/deploy` stores one self-contained
8
+ * authored source and creates a proactive listener whose watch rules match
9
+ * the chosen ticket sources on the workspace's relayfile projections. There
10
+ * is no webhook to register: the GitHub App installation (or Slack/Linear/
11
+ * Jira/Shortcut connection) is the ingress, and each matching ticket launches
12
+ * a run of the stored source with `{ approver, issue, event }` as its input,
13
+ * inside a fresh branch of the deployment's repository.
14
+ */
15
+ export const FLOW_TRIGGER_PROVIDERS = ['github', 'linear', 'jira', 'shortcut', 'slack'];
16
+ /** Settings Cloud's launcher prefilter reads per provider (`flow-trigger-sources.ts`). */
17
+ const PROVIDER_SETTINGS = {
18
+ // `events`: `issues` (default) or `pull_request` — which GitHub records
19
+ // wake the listener (AgentWorkforce/cloud#3772).
20
+ github: ['repository', 'labels', 'contains', 'events'],
21
+ slack: ['channel', 'contains'],
22
+ linear: ['team', 'contains'],
23
+ jira: ['project', 'contains'],
24
+ shortcut: ['workspace', 'contains'],
25
+ };
26
+ const MAX_SOURCE_BYTES = 256_000;
27
+ const MAX_SETTING_LENGTH = 500;
28
+ const REPO_OWNER = /^[A-Za-z0-9-]{1,39}$/u;
29
+ const REPO_NAME = /^[A-Za-z0-9_.-]{1,100}$/u;
30
+ export const FLOW_AGENT_HARNESSES = ['claude', 'codex'];
31
+ export function parseAgentHarnesses(value) {
32
+ const agents = value.split(',').map(a => a.trim()).filter(Boolean);
33
+ if (agents.length === 0 || agents.length > 2 || new Set(agents).size !== agents.length
34
+ || !agents.every(a => FLOW_AGENT_HARNESSES.includes(a))) {
35
+ throw new CloudFlowError('invalid_input', `--agents takes one or two of ${FLOW_AGENT_HARNESSES.join(', ')}, got "${value}".`);
36
+ }
37
+ return agents;
38
+ }
39
+ export function parseRepository(value) {
40
+ const [owner, name, extra] = value.replace(/^https?:\/\/github\.com\//iu, '').replace(/\.git$/iu, '').split('/');
41
+ if (!owner || !name || extra !== undefined || !REPO_OWNER.test(owner) || !REPO_NAME.test(name)) {
42
+ throw new CloudFlowError('invalid_input', `Expected --repo <owner>/<name>, got "${value}".`);
43
+ }
44
+ return { owner, name };
45
+ }
46
+ /** `github`, `github:labels=agent,contains=urgent`, `slack:channel=#eng`. */
47
+ export function parseTriggerSource(value) {
48
+ const colon = value.indexOf(':');
49
+ const provider = (colon === -1 ? value : value.slice(0, colon)).trim();
50
+ if (!FLOW_TRIGGER_PROVIDERS.includes(provider)) {
51
+ throw new CloudFlowError('invalid_input', `Unknown trigger provider "${provider}"; expected one of ${FLOW_TRIGGER_PROVIDERS.join(', ')}.`);
52
+ }
53
+ const allowed = PROVIDER_SETTINGS[provider];
54
+ const settings = {};
55
+ if (colon !== -1) {
56
+ for (const pair of value.slice(colon + 1).split(',')) {
57
+ const eq = pair.indexOf('=');
58
+ const key = (eq === -1 ? pair : pair.slice(0, eq)).trim();
59
+ const setting = eq === -1 ? '' : pair.slice(eq + 1).trim();
60
+ if (!allowed.includes(key)) {
61
+ throw new CloudFlowError('invalid_input', `"${key}" is not a ${provider} trigger setting; ${provider} accepts ${allowed.join(', ')}.`);
62
+ }
63
+ if (!setting || setting.length > MAX_SETTING_LENGTH || key in settings) {
64
+ throw new CloudFlowError('invalid_input', `Trigger setting "${key}" must be given once with a non-empty value.`);
65
+ }
66
+ if (key === 'events') {
67
+ // Cloud's enum is lowercase; send it that way whatever the shell typed.
68
+ const events = setting.toLowerCase();
69
+ if (!['issues', 'pull_request'].includes(events)) {
70
+ throw new CloudFlowError('invalid_input', `github events must be "issues" or "pull_request", got "${setting}".`);
71
+ }
72
+ settings[key] = events;
73
+ continue;
74
+ }
75
+ settings[key] = setting;
76
+ }
77
+ }
78
+ return { provider: provider, settings };
79
+ }
80
+ export async function deployToCloud(input, options = {}) {
81
+ if (!/\.flow\.ts$/iu.test(input.path)) {
82
+ throw new CloudFlowError('unsupported_source', 'flows deploy takes one authored .flow.ts source.');
83
+ }
84
+ let bytes;
85
+ try {
86
+ bytes = await readFile(input.path);
87
+ }
88
+ catch (error) {
89
+ throw new CloudFlowError('invalid_input', `Cannot read ${input.path}: ${error.code ?? error.message}.`);
90
+ }
91
+ const source = bytes.toString('utf8');
92
+ if (!bytes.length || Buffer.from(source, 'utf8').compare(bytes) !== 0) {
93
+ throw new CloudFlowError('invalid_input', 'Authored source must be nonempty, lossless UTF-8.');
94
+ }
95
+ if (bytes.length > MAX_SOURCE_BYTES) {
96
+ throw new CloudFlowError('invalid_input', `Authored source exceeds Cloud's ${MAX_SOURCE_BYTES}-byte deploy limit.`);
97
+ }
98
+ let loaded;
99
+ let definition;
100
+ try {
101
+ loaded = await loadAuthoredFlow(input.path);
102
+ definition = loaded.getDefinition(loaded.handle);
103
+ }
104
+ catch (error) {
105
+ if (error instanceof CloudFlowError)
106
+ throw error;
107
+ // A source that does not load is an authoring problem, refused before HTTP.
108
+ throw new CloudFlowError('unsupported_source', `${input.path} is not a loadable authored flow: ${error instanceof Error ? error.message : String(error)}`);
109
+ }
110
+ if (loaded.graph.length !== 1) {
111
+ throw new CloudFlowError('unsupported_source', 'Cloud deploys one self-contained .flow.ts source without use dependencies.');
112
+ }
113
+ if (input.sources.length === 0 || input.sources.length > 10) {
114
+ throw new CloudFlowError('invalid_input', 'Give between one and ten --on trigger sources.');
115
+ }
116
+ if (new Set(input.sources.map(s => s.provider)).size !== input.sources.length) {
117
+ throw new CloudFlowError('invalid_input', 'Each trigger provider can be given once.');
118
+ }
119
+ const approver = input.approver.trim();
120
+ if (!approver)
121
+ throw new CloudFlowError('invalid_input', '--approver must name who approves f.human questions.');
122
+ const name = (input.name ?? definition.name).trim();
123
+ if (!name || name.length > 100)
124
+ throw new CloudFlowError('invalid_input', 'Deployment name must be 1-100 characters.');
125
+ // A GitHub source scoped to nothing would wake on every repository the
126
+ // installation covers; default it to the deployment's own repository.
127
+ const sources = input.sources.map(s => s.provider === 'github' && s.settings['repository'] === undefined
128
+ ? { ...s, settings: { ...s.settings, repository: `${input.repository.owner}/${input.repository.name}` } }
129
+ : s);
130
+ options.signal?.throwIfAborted();
131
+ const whoami = await cloudRequest('/api/v1/auth/whoami', options);
132
+ const workspace = isCloudRecord(whoami) && isCloudRecord(whoami.currentWorkspace) ? whoami.currentWorkspace : undefined;
133
+ if (workspace === undefined || typeof workspace.id !== 'string' || !workspace.id) {
134
+ throw new CloudFlowError('invalid_response', 'Cloud did not report a current workspace for this credential.');
135
+ }
136
+ const agents = input.agents ?? ['claude'];
137
+ const result = await cloudFetch('/api/v1/flows/deploy', options, { method: 'POST', detail: true, body: JSON.stringify({
138
+ workspaceId: workspace.id,
139
+ mode: input.draft ? 'draft' : 'activate',
140
+ name,
141
+ // The onboarding's workflow-shape label; the CLI deploys authored source as-is.
142
+ workflow: 'flows-cli',
143
+ source,
144
+ handoffId: `flows-cli-${randomBytes(8).toString('hex')}`,
145
+ inputs: { approver, agents },
146
+ repository: input.repository,
147
+ sources,
148
+ }) });
149
+ if (!isCloudRecord(result) || typeof result.agentId !== 'string' || typeof result.status !== 'string') {
150
+ throw new CloudFlowError('invalid_response', 'Cloud did not return a deployment.');
151
+ }
152
+ return {
153
+ agentId: result.agentId, name, status: result.status,
154
+ repository: input.repository, sources,
155
+ sourceSha256: createHash('sha256').update(bytes).digest('hex'),
156
+ };
157
+ }
158
+ export async function listCloudDeployments(options = {}) {
159
+ const payload = await cloudRequest('/api/v1/agents/flow-deployments', options);
160
+ if (!isCloudRecord(payload) || !Array.isArray(payload.deployments)) {
161
+ throw new CloudFlowError('invalid_response', 'Cloud did not return a deployments list.');
162
+ }
163
+ return payload.deployments.map((row) => {
164
+ if (!isCloudRecord(row) || typeof row.agentId !== 'string' || typeof row.name !== 'string') {
165
+ throw new CloudFlowError('invalid_response', 'Cloud returned a malformed deployment row.');
166
+ }
167
+ const repository = isCloudRecord(row.repository) && typeof row.repository.owner === 'string'
168
+ && typeof row.repository.name === 'string' ? { owner: row.repository.owner, name: row.repository.name } : undefined;
169
+ const sources = Array.isArray(row.sources) ? row.sources.flatMap((s) => isCloudRecord(s) && typeof s.provider === 'string' && FLOW_TRIGGER_PROVIDERS.includes(s.provider)
170
+ ? [{ provider: s.provider,
171
+ settings: Object.fromEntries(Object.entries(isCloudRecord(s.settings) ? s.settings : {})
172
+ .flatMap(([k, v]) => typeof v === 'string' ? [[k, v]] : typeof v === 'boolean' ? [[k, String(v)]] : [])) }]
173
+ : []) : [];
174
+ return {
175
+ agentId: row.agentId, name: row.name, status: typeof row.status === 'string' ? row.status : 'unknown',
176
+ ...(repository === undefined ? {} : { repository }), sources,
177
+ ...(typeof row.createdAt === 'string' ? { createdAt: row.createdAt } : {}),
178
+ ...(typeof row.updatedAt === 'string' ? { updatedAt: row.updatedAt } : {}),
179
+ };
180
+ });
181
+ }
182
+ const LISTENER_ID = /^[A-Za-z0-9_-]{1,128}$/u;
183
+ /** `DELETE /api/v1/flows/listeners/<id>`: the listener stops; past runs and their journals stay. */
184
+ export async function undeployFromCloud(agentId, options = {}) {
185
+ if (!LISTENER_ID.test(agentId))
186
+ throw new CloudFlowError('invalid_input', `"${agentId}" is not a deployment id.`);
187
+ const result = await cloudFetch(`/api/v1/flows/listeners/${encodeURIComponent(agentId)}`, options, { method: 'DELETE', detail: true });
188
+ if (!isCloudRecord(result) || result.status !== 'deleted') {
189
+ throw new CloudFlowError('invalid_response', 'Cloud did not confirm the deletion.');
190
+ }
191
+ }
192
+ //# sourceMappingURL=cloud-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-deploy.js","sourceRoot":"","sources":["../src/cloud-deploy.ts"],"names":[],"mappings":"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"}
@@ -7,16 +7,66 @@ export interface CloudConnectionOptions {
7
7
  /** Bounds each HTTP request, never the hosted run. Defaults to 30 seconds. */
8
8
  requestTimeoutMs?: number;
9
9
  }
10
+ /** A refusal Cloud answered as JSON: only these fields are ever read. */
11
+ export interface CloudRefusal {
12
+ code: string;
13
+ error: string;
14
+ /** Version-only descriptions, when a route names what it wanted vs. got. */
15
+ expected?: {
16
+ packageName?: string;
17
+ version?: string;
18
+ };
19
+ received?: {
20
+ packageName?: string;
21
+ version?: string;
22
+ };
23
+ }
10
24
  export declare class CloudFlowError extends Error {
11
- readonly code: 'configuration' | 'unsupported_source' | 'invalid_input' | 'invalid_response' | 'http_error' | 'transport_error' | 'transient_error';
25
+ readonly code: 'configuration' | 'unsupported_source' | 'invalid_input' | 'invalid_response' | 'http_error' | 'transport_error' | 'transient_error' | 'unsupported_storage_backend' | 'sync_too_large' | 'sync_unsupported' | 'patch_conflict';
12
26
  readonly status?: number | undefined;
13
- constructor(code: 'configuration' | 'unsupported_source' | 'invalid_input' | 'invalid_response' | 'http_error' | 'transport_error' | 'transient_error', message: string, status?: number | undefined);
27
+ readonly refusal?: CloudRefusal | undefined;
28
+ constructor(code: 'configuration' | 'unsupported_source' | 'invalid_input' | 'invalid_response' | 'http_error' | 'transport_error' | 'transient_error' | 'unsupported_storage_backend' | 'sync_too_large' | 'sync_unsupported' | 'patch_conflict', message: string, status?: number | undefined, refusal?: CloudRefusal | undefined);
29
+ }
30
+ /**
31
+ * The `agent-relay cloud login` credential store. Read only when neither the
32
+ * `token` option nor `FLOWS_CLOUD_TOKEN` is set, so an explicit credential
33
+ * always wins and this file can change shape without breaking a configured
34
+ * caller. Its `apiUrl` becomes the default base URL for the same reason: a
35
+ * login against one deployment must not send its token to another.
36
+ */
37
+ export declare function agentRelayCloudAuthPath(env?: NodeJS.ProcessEnv): string;
38
+ export interface AgentRelayCloudLogin {
39
+ apiUrl: string;
40
+ accessToken: string;
41
+ /** ISO-8601; the store carries it, so an expired login refuses with a real reason. */
42
+ accessTokenExpiresAt?: string;
14
43
  }
44
+ export declare function readAgentRelayCloudLogin(env?: NodeJS.ProcessEnv, read?: (path: string) => string): AgentRelayCloudLogin | undefined;
15
45
  export declare function cloudConnection(options: CloudConnectionOptions): {
16
46
  baseUrl: string;
17
47
  token: string;
18
48
  };
19
49
  export declare function cloudRequest(path: string, options: CloudConnectionOptions, body?: unknown): Promise<unknown>;
50
+ export interface CloudFetchInit {
51
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
52
+ body?: string | Uint8Array;
53
+ contentType?: string;
54
+ /**
55
+ * A run-scoped token issued by Cloud for one upload (the `prepare` receipt's
56
+ * storage credential). Used instead of the configured token for that request
57
+ * only; it is never persisted or logged.
58
+ */
59
+ bearerToken?: string;
60
+ /**
61
+ * On a non-2xx response, read a `{ code, error }` refusal from the body and
62
+ * name it. Only those two string fields are ever surfaced, so a route that
63
+ * answers with structured refusals (the deploy routes) can explain itself
64
+ * without this client echoing arbitrary response bodies.
65
+ */
66
+ detail?: boolean;
67
+ }
68
+ /** One authenticated Cloud request. Every transport error is typed; no retries. */
69
+ export declare function cloudFetch(path: string, options: CloudConnectionOptions, init: CloudFetchInit): Promise<unknown>;
20
70
  export declare function cloudRunId(value: unknown): string;
21
71
  export declare function isCloudRecord(value: unknown): value is Record<string, unknown>;
22
72
  //# sourceMappingURL=cloud-http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-http.d.ts","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,eAAe,GAAG,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,GAAG,iBAAiB;IAEnJ,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBAFf,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,eAAe,GAAG,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,GAAG,iBAAiB,EACnJ,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA;CAK3B;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBnG;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAgClB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
1
+ {"version":3,"file":"cloud-http.d.ts","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,eAAe,GAAG,kBAAkB,GAAG,YAAY,GACvG,iBAAiB,GAAG,iBAAiB,GAAG,6BAA6B,GAAG,gBAAgB,GAAG,kBAAkB,GAC7G,gBAAgB;IAEpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY;gBALtB,IAAI,EAAE,eAAe,GAAG,oBAAoB,GAAG,eAAe,GAAG,kBAAkB,GAAG,YAAY,GACvG,iBAAiB,GAAG,iBAAiB,GAAG,6BAA6B,GAAG,gBAAgB,GAAG,kBAAkB,GAC7G,gBAAgB,EACpB,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,YAAY,YAAA;CAKlC;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEpF;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAA2C,GAClE,oBAAoB,GAAG,SAAS,CAalC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgDnG;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC,CAoDlB;AAmCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E"}
@@ -1,22 +1,66 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
1
4
  export class CloudFlowError extends Error {
2
5
  code;
3
6
  status;
4
- constructor(code, message, status) {
7
+ refusal;
8
+ constructor(code, message, status, refusal) {
5
9
  super(message);
6
10
  this.code = code;
7
11
  this.status = status;
12
+ this.refusal = refusal;
8
13
  this.name = 'CloudFlowError';
9
14
  }
10
15
  }
16
+ /**
17
+ * The `agent-relay cloud login` credential store. Read only when neither the
18
+ * `token` option nor `FLOWS_CLOUD_TOKEN` is set, so an explicit credential
19
+ * always wins and this file can change shape without breaking a configured
20
+ * caller. Its `apiUrl` becomes the default base URL for the same reason: a
21
+ * login against one deployment must not send its token to another.
22
+ */
23
+ export function agentRelayCloudAuthPath(env = process.env) {
24
+ return join(env['AGENT_RELAY_HOME'] ?? join(homedir(), '.agentworkforce/relay'), 'cloud-auth.json');
25
+ }
26
+ export function readAgentRelayCloudLogin(env = process.env, read = path => readFileSync(path, 'utf8')) {
27
+ let parsed;
28
+ try {
29
+ parsed = JSON.parse(read(agentRelayCloudAuthPath(env)));
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ if (!isCloudRecord(parsed) || typeof parsed.apiUrl !== 'string' || typeof parsed.accessToken !== 'string'
35
+ || !parsed.accessToken.trim())
36
+ return undefined;
37
+ return {
38
+ apiUrl: parsed.apiUrl, accessToken: parsed.accessToken,
39
+ ...(typeof parsed.accessTokenExpiresAt === 'string' ? { accessTokenExpiresAt: parsed.accessTokenExpiresAt } : {}),
40
+ };
41
+ }
11
42
  export function cloudConnection(options) {
12
- const rawToken = options.token ?? process.env['FLOWS_CLOUD_TOKEN'];
43
+ let rawToken = options.token ?? process.env['FLOWS_CLOUD_TOKEN'];
44
+ let loginApiUrl;
45
+ if (rawToken === undefined) {
46
+ const login = readAgentRelayCloudLogin();
47
+ if (login !== undefined) {
48
+ const expiresAt = login.accessTokenExpiresAt === undefined ? Number.NaN : Date.parse(login.accessTokenExpiresAt);
49
+ if (Number.isFinite(expiresAt) && expiresAt <= Date.now()) {
50
+ throw new CloudFlowError('configuration', 'The agent-relay cloud login has expired. Run `agent-relay cloud login` again, or set FLOWS_CLOUD_TOKEN.');
51
+ }
52
+ rawToken = login.accessToken;
53
+ loginApiUrl = login.apiUrl;
54
+ }
55
+ }
13
56
  const token = rawToken?.trim();
14
57
  if (!token || /[\r\n]/u.test(rawToken) || /^(?:rk|ot)_live_/u.test(token)) {
15
- throw new CloudFlowError('configuration', 'Set FLOWS_CLOUD_TOKEN to a scoped Cloud API token (workflow:invoke:write and workflow:runs:read).');
58
+ throw new CloudFlowError('configuration', 'Set FLOWS_CLOUD_TOKEN to a scoped Cloud API token (workflow:invoke:write and workflow:runs:read), '
59
+ + 'or sign in with `agent-relay cloud login`.');
16
60
  }
17
61
  let url;
18
62
  try {
19
- url = new URL(options.apiUrl ?? process.env['FLOWS_CLOUD_URL'] ?? 'https://agentrelay.com/cloud');
63
+ url = new URL(options.apiUrl ?? process.env['FLOWS_CLOUD_URL'] ?? loginApiUrl ?? 'https://agentrelay.com/cloud');
20
64
  }
21
65
  catch {
22
66
  throw new CloudFlowError('configuration', 'FLOWS_CLOUD_URL must be an absolute Cloud application base URL.');
@@ -25,21 +69,52 @@ export function cloudConnection(options) {
25
69
  || url.username || url.password || url.search || url.hash || !/^\/[A-Za-z0-9/_-]*$/u.test(url.pathname)) {
26
70
  throw new CloudFlowError('configuration', 'Cloud URL must use HTTPS and a plain base path.');
27
71
  }
28
- return { baseUrl: `${url.origin}${url.pathname.replace(/\/+$/u, '')}`, token };
72
+ const baseUrl = `${url.origin}${url.pathname.replace(/\/+$/u, '')}`;
73
+ // A login-store token is bound to the deployment that issued it. An explicit
74
+ // URL that names another deployment gets no token at all — set
75
+ // FLOWS_CLOUD_TOKEN for that deployment instead.
76
+ if (loginApiUrl !== undefined) {
77
+ let issued;
78
+ try {
79
+ const login = new URL(loginApiUrl);
80
+ issued = `${login.origin}${login.pathname.replace(/\/+$/u, '')}`;
81
+ }
82
+ catch {
83
+ issued = undefined;
84
+ }
85
+ if (issued !== baseUrl) {
86
+ throw new CloudFlowError('configuration', `The agent-relay cloud login was issued for ${loginApiUrl}, not ${baseUrl}. `
87
+ + 'Set FLOWS_CLOUD_TOKEN for that deployment, or unset FLOWS_CLOUD_URL to use the login.');
88
+ }
89
+ }
90
+ return { baseUrl, token };
29
91
  }
30
92
  export async function cloudRequest(path, options, body) {
93
+ return cloudFetch(path, options, body === undefined
94
+ ? { method: 'GET' }
95
+ : { method: 'POST', body: JSON.stringify(body), contentType: 'application/json' });
96
+ }
97
+ /** One authenticated Cloud request. Every transport error is typed; no retries. */
98
+ export async function cloudFetch(path, options, init) {
31
99
  const { baseUrl, token } = cloudConnection(options);
32
100
  const timeout = options.requestTimeoutMs ?? 30_000;
33
101
  if (!Number.isSafeInteger(timeout) || timeout < 1 || timeout > 2_147_483_647) {
34
102
  throw new CloudFlowError('configuration', 'requestTimeoutMs must be a positive 32-bit integer.');
35
103
  }
104
+ const bearer = init.bearerToken ?? token;
105
+ if (/[\r\n]/u.test(bearer) || !bearer.trim()) {
106
+ throw new CloudFlowError('invalid_response', 'Cloud issued an unusable storage credential.');
107
+ }
36
108
  const deadline = AbortSignal.timeout(timeout);
37
109
  let response;
38
110
  try {
39
111
  response = await fetch(`${baseUrl}${path}`, {
40
- method: body === undefined ? 'GET' : 'POST',
41
- headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
42
- ...(body === undefined ? {} : { body: JSON.stringify(body) }),
112
+ method: init.method,
113
+ headers: {
114
+ authorization: `Bearer ${bearer}`,
115
+ 'content-type': init.contentType ?? 'application/json',
116
+ },
117
+ ...(init.body === undefined ? {} : { body: typeof init.body === 'string' ? init.body : new Blob([init.body]) }),
43
118
  signal: options.signal ? AbortSignal.any([options.signal, deadline]) : deadline,
44
119
  // A redirect must never carry the credential to a different origin.
45
120
  redirect: 'error',
@@ -51,7 +126,21 @@ export async function cloudRequest(path, options, body) {
51
126
  }
52
127
  if (!response.ok) {
53
128
  // Do not echo server response bodies: they may contain credentials or source.
54
- throw new CloudFlowError('http_error', `Cloud request failed with HTTP ${response.status}.`, response.status);
129
+ // Reading the body is itself a transport step: a cancellation or timeout
130
+ // there keeps its own classification instead of becoming an http_error.
131
+ let refusal;
132
+ if (init.detail) {
133
+ try {
134
+ refusal = await structuredRefusal(response);
135
+ }
136
+ catch (error) {
137
+ options.signal?.throwIfAborted();
138
+ throw transportError(deadline.aborted ? deadline.reason : error);
139
+ }
140
+ }
141
+ throw new CloudFlowError('http_error', refusal === undefined
142
+ ? `Cloud request failed with HTTP ${response.status}.`
143
+ : `Cloud refused (${refusal.code}): ${refusal.error}`, response.status, refusal);
55
144
  }
56
145
  try {
57
146
  return await response.json();
@@ -63,6 +152,43 @@ export async function cloudRequest(path, options, body) {
63
152
  throw new CloudFlowError('invalid_response', 'Cloud returned a non-JSON response.');
64
153
  }
65
154
  }
155
+ const REFUSAL_CODE = /^[a-z0-9_]{1,64}$/u;
156
+ /**
157
+ * Routes answer either `{ code, error }` or a bare `{ error: "<code>" }`;
158
+ * both are read, and an optional `expected`/`received` pair is reduced to
159
+ * package name and version. Nothing else in the body is looked at.
160
+ */
161
+ async function structuredRefusal(response) {
162
+ let body;
163
+ try {
164
+ body = await response.json();
165
+ }
166
+ catch (error) {
167
+ // Only a body that is not JSON is "no structured refusal"; an aborted or
168
+ // timed-out read is a transport failure and propagates.
169
+ if (error instanceof SyntaxError)
170
+ return undefined;
171
+ throw error;
172
+ }
173
+ if (!isCloudRecord(body) || typeof body.error !== 'string' || body.error.length > 500)
174
+ return undefined;
175
+ const code = typeof body.code === 'string' ? body.code : body.error;
176
+ if (!REFUSAL_CODE.test(code))
177
+ return undefined;
178
+ const versionOnly = (value) => {
179
+ if (!isCloudRecord(value))
180
+ return undefined;
181
+ const out = {};
182
+ if (typeof value.packageName === 'string' && value.packageName.length <= 100)
183
+ out.packageName = value.packageName;
184
+ if (typeof value.version === 'string' && /^[0-9A-Za-z.+-]{1,64}$/u.test(value.version))
185
+ out.version = value.version;
186
+ return out;
187
+ };
188
+ const expected = versionOnly(body.expected);
189
+ const received = versionOnly(body.received);
190
+ return { code, error: body.error, ...(expected ? { expected } : {}), ...(received ? { received } : {}) };
191
+ }
66
192
  // Defensive path-segment constraint; accepting a new server ID format needs an SDK change.
67
193
  export function cloudRunId(value) {
68
194
  if (typeof value !== 'string' || !/^[A-Za-z0-9_-]{1,128}$/u.test(value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-http.js","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-http.js","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ScheduleTriggerSource } from '@relayflows/surface';
1
2
  import type { RunCompletionReason } from './protocol.js';
2
3
  import type { FlowSpec } from './spec.js';
3
4
  import { type JsonValue } from './json-value.js';
@@ -11,6 +12,23 @@ export interface RunInCloudOptions extends CloudConnectionOptions {
11
12
  workspaceId?: string;
12
13
  /** Exact JSON input. Required at runtime for authored .flow.ts; refused for declarative source. */
13
14
  input?: JsonValue;
15
+ /**
16
+ * Upload this working tree before submission so the hosted run executes
17
+ * inside it (v1's `--sync-code`). Cloud-API storage only; see cloud-sync.ts.
18
+ * The submitted flow still travels as source in the request body, so it
19
+ * must remain self-contained: sibling imports inside the tree are not
20
+ * resolved by the hosted runner.
21
+ */
22
+ syncCode?: {
23
+ root: string;
24
+ };
25
+ /**
26
+ * Called immediately before the one non-idempotent request, the run
27
+ * submission. Everything before it (prepare, pack, upload) is safe to
28
+ * retry, so a caller classifying an interruption can tell "nothing was
29
+ * admitted" from "admission unknown".
30
+ */
31
+ onSubmit?: () => void;
14
32
  }
15
33
  export interface CloudRunReceipt {
16
34
  runId: string;
@@ -19,6 +37,12 @@ export interface CloudRunReceipt {
19
37
  specHash: string;
20
38
  /** Authenticated run API resource; this is not a public sharing URL. */
21
39
  apiUrl: string;
40
+ /** Present when a working tree was synced: what was uploaded, by count and size. */
41
+ synced?: {
42
+ files: number;
43
+ bytes: number;
44
+ skippedLinks: string[];
45
+ };
22
46
  }
23
47
  export interface CloudAuthoredAuthority {
24
48
  readonly schemaVersion: 1;
@@ -26,6 +50,8 @@ export interface CloudAuthoredAuthority {
26
50
  readonly byteLength: number;
27
51
  readonly surface: SurfaceModuleAuthority;
28
52
  }
53
+ /** The request-body fields a submission contributes; identical for a run and a schedule. */
54
+ export declare function cloudSubmissionBody(submission: CloudSubmission): Record<string, unknown>;
29
55
  export type CloudRunState = {
30
56
  runId: string;
31
57
  status: 'pending' | 'launching' | 'running';
@@ -34,6 +60,33 @@ export type CloudRunState = {
34
60
  status: 'completed' | 'failed' | 'cancelled';
35
61
  completionReason: RunCompletionReason;
36
62
  };
63
+ /**
64
+ * Submit a declarative flow to Cloud's pinned v2 runtime. Compilation only
65
+ * happens here; Cloud owns provisioning and the Rust engine owns execution.
66
+ * Returns acceptance, not completion. No local daemon, CLI probe, or node up.
67
+ */
68
+ /**
69
+ * What a Cloud submission carries, before any request: the exact source or
70
+ * canonical spec, the pinned authority for authored source, the input, and a
71
+ * local correlation hash. Shared by `runInCloud` and `scheduleInCloud`, so a
72
+ * schedule stores exactly what a run would send.
73
+ */
74
+ export interface CloudSubmission {
75
+ readonly workflow: string;
76
+ readonly fileType: 'yaml' | 'ts';
77
+ readonly authoredAuthority?: CloudAuthoredAuthority;
78
+ readonly inputs?: JsonValue;
79
+ readonly inputPresent: boolean;
80
+ readonly specHash: string;
81
+ /** The authored flow's declared name, or the spec name. */
82
+ readonly name: string;
83
+ /** Authored `schedule.*` handlers, for `flows schedule` to pick up. */
84
+ readonly schedules: readonly ScheduleTriggerSource[];
85
+ }
86
+ export declare function prepareCloudSubmission(flow: CloudFlowSource, options?: {
87
+ input?: JsonValue;
88
+ signal?: AbortSignal;
89
+ }): Promise<CloudSubmission>;
37
90
  /**
38
91
  * Submit a declarative flow to Cloud's pinned v2 runtime. Compilation only
39
92
  * happens here; Cloud owns provisioning and the Rust engine owns execution.
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-run.d.ts","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1D,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AACD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;CAC1C;AACD,MAAM,MAAM,aAAa,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;CAAE,GAC9D;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAAC,gBAAgB,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE3G;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAsF1B;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,aAAa,CAAC,CAoBxB;AAED,4FAA4F;AAC5F,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
1
+ {"version":3,"file":"cloud-run.d.ts","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"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"}