@versori/run 0.3.0-beta.2 → 0.3.0-beta.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.
@@ -1 +1 @@
1
- {"version":3,"file":"DirectConnectionFactory.d.ts","sourceRoot":"","sources":["../../../src/src/connection/DirectConnectionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1D;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAKzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAR3B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA4B;IACtE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA2B;gBAGtD,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,MAAM,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,EAChE,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,EAC5C,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,oBAAoB,CAAC,EACpD,MAAM,EAAE,MAAM;IAkBnC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB;CAqB1D"}
1
+ {"version":3,"file":"DirectConnectionFactory.d.ts","sourceRoot":"","sources":["../../../src/src/connection/DirectConnectionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1D;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAKzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAR3B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA4B;IACtE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA2B;gBAGtD,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,MAAM,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,EAChE,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,EAC5C,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,oBAAoB,CAAC,EACpD,MAAM,EAAE,MAAM;IAkBnC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB;CAiB1D"}
@@ -1,6 +1,6 @@
1
- import { createClient } from '@connectrpc/connect';
2
1
  import { createGrpcTransport } from '@connectrpc/connect-node';
3
2
  import { credentialv1alpha1, tokensv1, oauth1v1 } from '../services/credentials/mod.js';
3
+ import { createConnectRpcClient } from '../services/createConnectRpcClient.js';
4
4
  import { HttpClientFactory } from './internal/HttpClientFactory.js';
5
5
  import { ExpressInboundConnectionFactory as InboundConnectionFactory } from './internal/InboundConnectionFactory.js';
6
6
  import { OutboundConnectionFactory } from './internal/OutboundConnectionFactory.js';
@@ -70,12 +70,9 @@ export class DirectConnectionFactory {
70
70
  }
71
71
  static fromEnv(logger) {
72
72
  const baseUrl = Deno.env.get(envVarCredsBaseURL) || 'http://localhost:9000';
73
- const transport = createGrpcTransport({
74
- baseUrl,
75
- });
76
- const credentials = createClient(credentialv1alpha1.CredentialService, transport);
77
- const tokens = createClient(tokensv1.TokenService, transport);
78
- const oauth1 = createClient(oauth1v1.AuthorizationService, transport);
73
+ const credentials = createConnectRpcClient(credentialv1alpha1.CredentialService, () => { return createGrpcTransport({ baseUrl }); });
74
+ const tokens = createConnectRpcClient(tokensv1.TokenService, () => { return createGrpcTransport({ baseUrl }); });
75
+ const oauth1 = createConnectRpcClient(oauth1v1.AuthorizationService, () => { return createGrpcTransport({ baseUrl }); });
79
76
  const httpClientFactory = new HttpClientFactory();
80
77
  return new DirectConnectionFactory(httpClientFactory, credentials, tokens, oauth1, logger);
81
78
  }
@@ -1,7 +1,6 @@
1
1
  import { Tracer } from '@opentelemetry/api';
2
2
  import { Router } from 'express';
3
3
  import { Observable, OperatorFunction } from 'rxjs';
4
- import { DirectConnectionFactory } from '../../connection/DirectConnectionFactory.js';
5
4
  import { ContextImpl } from '../../context/Context.js';
6
5
  import { ContextProvider } from '../../context/ContextProvider.js';
7
6
  import { ConfigReader } from '../../dsl/http/types.js';
@@ -11,12 +10,13 @@ import { IssueAPI } from '../../issues/Issues.js';
11
10
  import { Logger } from '../../observability/logging/Logger.js';
12
11
  import { PlatformApi } from '../../services/platform/PlatformApi.js';
13
12
  import { ContextOperatorFunction, TaskCompiler, TriggerCompiler } from './compilers/types.js';
13
+ import { ConnectionFactory } from '../../connection/types.js';
14
14
  export type CompilerContext = {
15
15
  compiler: ObservableCompiler;
16
16
  log: Logger;
17
17
  tracer: Tracer;
18
18
  contextProvider: ContextProvider;
19
- cnxFactory: DirectConnectionFactory;
19
+ cnxFactory: ConnectionFactory;
20
20
  platformApi: PlatformApi;
21
21
  webhookRouter: Router;
22
22
  cronRouter: Router;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAe,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AASrE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI9F,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,uBAAuB,CAAC;IACpC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CACrF,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,CAAC,KACN,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAE/B,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,gBAAgB,CAAgD;;IAgBxE,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,EACzC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GACpB,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAe1C,cAAc,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAC3D,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,WAAW,GACpB,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAerC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAKjF,eAAe,CAAC,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;CAIjF"}
1
+ {"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAe,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AASrE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CACrF,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,CAAC,KACN,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAE/B,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,gBAAgB,CAAgD;;IAgBxE,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,EACzC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GACpB,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAe1C,cAAc,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAC3D,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,WAAW,GACpB,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAerC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAKjF,eAAe,CAAC,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;CAIjF"}
@@ -0,0 +1,16 @@
1
+ import { DescService } from '@bufbuild/protobuf';
2
+ import { Client, Transport } from '@connectrpc/connect';
3
+ /**
4
+ * Create a gRPC client with retry logic for Deno's unsupported GOAWAY issue.
5
+ *
6
+ * This function makes use of ES6 Proxy classes to intercept method calls and retry on connection
7
+ * errors. Users must not mess with the returned client object or change the receiver (i.e. by
8
+ * using this client as the prototype for another object).
9
+ *
10
+ * This will also not work with gRPC streams, but could be extended to do so.
11
+ *
12
+ * @param service - The service descriptor.
13
+ * @returns A gRPC client with retry logic for connection errors.
14
+ */
15
+ export declare function createConnectRpcClient<T extends DescService>(service: T, transportFn: () => Transport): Client<T>;
16
+ //# sourceMappingURL=createConnectRpcClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createConnectRpcClient.d.ts","sourceRoot":"","sources":["../../../src/src/services/createConnectRpcClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACH,MAAM,EAIN,SAAS,EACZ,MAAM,qBAAqB,CAAC;AAM7B;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,WAAW,EACxD,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,MAAM,SAAS,GAC7B,MAAM,CAAC,CAAC,CAAC,CAsEX"}
@@ -0,0 +1,63 @@
1
+ import { Code, ConnectError, createClient as connectCreateClient, } from '@connectrpc/connect';
2
+ /**
3
+ * Create a gRPC client with retry logic for Deno's unsupported GOAWAY issue.
4
+ *
5
+ * This function makes use of ES6 Proxy classes to intercept method calls and retry on connection
6
+ * errors. Users must not mess with the returned client object or change the receiver (i.e. by
7
+ * using this client as the prototype for another object).
8
+ *
9
+ * This will also not work with gRPC streams, but could be extended to do so.
10
+ *
11
+ * @param service - The service descriptor.
12
+ * @returns A gRPC client with retry logic for connection errors.
13
+ */
14
+ export function createConnectRpcClient(service, transportFn) {
15
+ function createClientInner() {
16
+ return connectCreateClient(service, transportFn());
17
+ }
18
+ const handler = {
19
+ get(target, prop, receiver) {
20
+ const original = Reflect.get(target.value, prop, receiver);
21
+ if (typeof original !== 'function') {
22
+ return original;
23
+ }
24
+ return (...args) => {
25
+ try {
26
+ const result = Reflect.apply(original, receiver, args);
27
+ // If promise-like, attach retry-once logic
28
+ if (result && typeof result.then === 'function') {
29
+ return result.catch((error) => {
30
+ if (!(error instanceof ConnectError)) {
31
+ throw error;
32
+ }
33
+ if (error.rawMessage.includes('connection error received: not a result of an error') &&
34
+ error.code === Code.Internal) {
35
+ // Recreate client and retry once
36
+ target.value = createClientInner();
37
+ const rebound = Reflect.get(target.value, prop, receiver);
38
+ return Reflect.apply(rebound, receiver, args);
39
+ }
40
+ throw error;
41
+ });
42
+ }
43
+ // Non-promise results (e.g., streaming iterables) are returned as-is
44
+ return result;
45
+ }
46
+ catch (error) {
47
+ if (!(error instanceof ConnectError)) {
48
+ throw error;
49
+ }
50
+ if (error.rawMessage.includes('connection error received: not a result of an error') && error.code === Code.Internal) {
51
+ target.value = createClientInner();
52
+ const rebound = Reflect.get(target.value, prop, receiver);
53
+ return Reflect.apply(rebound, receiver, args);
54
+ }
55
+ throw error;
56
+ }
57
+ };
58
+ },
59
+ };
60
+ return new Proxy({
61
+ value: createClientInner(),
62
+ }, handler);
63
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"isTokenValid.d.ts","sourceRoot":"","sources":["../../../../src/src/services/credentials/isTokenValid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAI9C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAMvD"}
1
+ {"version":3,"file":"isTokenValid.d.ts","sourceRoot":"","sources":["../../../../src/src/services/credentials/isTokenValid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAI9C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAsBvD"}
@@ -4,5 +4,20 @@ export function isTokenValid(t) {
4
4
  if (!t.expiry) {
5
5
  return true;
6
6
  }
7
+ // the timestamp for api key looks like this
8
+ // {
9
+ // "token": {
10
+ // "access_token": "dgfjdghjhfgjdfghj",
11
+ // "token_type": "",
12
+ // "expiry": {
13
+ // "seconds": "-62135596800",
14
+ // "nanos": 0
15
+ // }
16
+ // }
17
+ // }
18
+ // just hope and pray that it is valid
19
+ if (t.expiry.seconds <= 0) {
20
+ return true;
21
+ }
7
22
  return (timestampMs(t.expiry) - TOKEN_EXPIRY_JITTER_MS) > Date.now();
8
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versori/run",
3
- "version": "v0.3.0-beta.2",
3
+ "version": "v0.3.0-beta.4",
4
4
  "description": "Versori Run",
5
5
  "homepage": "https://github.com/versori/versori-run#readme",
6
6
  "repository": {
@@ -1 +1 @@
1
- {"version":3,"file":"DirectConnectionFactory.d.ts","sourceRoot":"","sources":["../../../src/src/connection/DirectConnectionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1D;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAKzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAR3B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA4B;IACtE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA2B;gBAGtD,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,MAAM,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,EAChE,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,EAC5C,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,oBAAoB,CAAC,EACpD,MAAM,EAAE,MAAM;IAkBnC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB;CAqB1D"}
1
+ {"version":3,"file":"DirectConnectionFactory.d.ts","sourceRoot":"","sources":["../../../src/src/connection/DirectConnectionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1D;;;;;;;GAOG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAKzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAR3B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA4B;IACtE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA2B;gBAGtD,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,MAAM,CAAC,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,EAChE,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,EAC5C,MAAM,EAAE,MAAM,CAAC,OAAO,QAAQ,CAAC,oBAAoB,CAAC,EACpD,MAAM,EAAE,MAAM;IAkBnC,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAI5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB;CAiB1D"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DirectConnectionFactory = void 0;
4
- const connect_1 = require("@connectrpc/connect");
5
4
  const connect_node_1 = require("@connectrpc/connect-node");
6
5
  const mod_js_1 = require("../services/credentials/mod.js");
6
+ const createConnectRpcClient_js_1 = require("../services/createConnectRpcClient.js");
7
7
  const HttpClientFactory_js_1 = require("./internal/HttpClientFactory.js");
8
8
  const InboundConnectionFactory_js_1 = require("./internal/InboundConnectionFactory.js");
9
9
  const OutboundConnectionFactory_js_1 = require("./internal/OutboundConnectionFactory.js");
@@ -73,12 +73,9 @@ class DirectConnectionFactory {
73
73
  }
74
74
  static fromEnv(logger) {
75
75
  const baseUrl = Deno.env.get(constants_js_1.envVarCredsBaseURL) || 'http://localhost:9000';
76
- const transport = (0, connect_node_1.createGrpcTransport)({
77
- baseUrl,
78
- });
79
- const credentials = (0, connect_1.createClient)(mod_js_1.credentialv1alpha1.CredentialService, transport);
80
- const tokens = (0, connect_1.createClient)(mod_js_1.tokensv1.TokenService, transport);
81
- const oauth1 = (0, connect_1.createClient)(mod_js_1.oauth1v1.AuthorizationService, transport);
76
+ const credentials = (0, createConnectRpcClient_js_1.createConnectRpcClient)(mod_js_1.credentialv1alpha1.CredentialService, () => { return (0, connect_node_1.createGrpcTransport)({ baseUrl }); });
77
+ const tokens = (0, createConnectRpcClient_js_1.createConnectRpcClient)(mod_js_1.tokensv1.TokenService, () => { return (0, connect_node_1.createGrpcTransport)({ baseUrl }); });
78
+ const oauth1 = (0, createConnectRpcClient_js_1.createConnectRpcClient)(mod_js_1.oauth1v1.AuthorizationService, () => { return (0, connect_node_1.createGrpcTransport)({ baseUrl }); });
82
79
  const httpClientFactory = new HttpClientFactory_js_1.HttpClientFactory();
83
80
  return new DirectConnectionFactory(httpClientFactory, credentials, tokens, oauth1, logger);
84
81
  }
@@ -1,7 +1,6 @@
1
1
  import { Tracer } from '@opentelemetry/api';
2
2
  import { Router } from 'express';
3
3
  import { Observable, OperatorFunction } from 'rxjs';
4
- import { DirectConnectionFactory } from '../../connection/DirectConnectionFactory.js';
5
4
  import { ContextImpl } from '../../context/Context.js';
6
5
  import { ContextProvider } from '../../context/ContextProvider.js';
7
6
  import { ConfigReader } from '../../dsl/http/types.js';
@@ -11,12 +10,13 @@ import { IssueAPI } from '../../issues/Issues.js';
11
10
  import { Logger } from '../../observability/logging/Logger.js';
12
11
  import { PlatformApi } from '../../services/platform/PlatformApi.js';
13
12
  import { ContextOperatorFunction, TaskCompiler, TriggerCompiler } from './compilers/types.js';
13
+ import { ConnectionFactory } from '../../connection/types.js';
14
14
  export type CompilerContext = {
15
15
  compiler: ObservableCompiler;
16
16
  log: Logger;
17
17
  tracer: Tracer;
18
18
  contextProvider: ContextProvider;
19
- cnxFactory: DirectConnectionFactory;
19
+ cnxFactory: ConnectionFactory;
20
20
  platformApi: PlatformApi;
21
21
  webhookRouter: Router;
22
22
  cronRouter: Router;
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAe,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AASrE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI9F,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,uBAAuB,CAAC;IACpC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CACrF,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,CAAC,KACN,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAE/B,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,gBAAgB,CAAgD;;IAgBxE,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,EACzC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GACpB,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAe1C,cAAc,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAC3D,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,WAAW,GACpB,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAerC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAKjF,eAAe,CAAC,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;CAIjF"}
1
+ {"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAe,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AASrE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,QAAQ,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CACrF,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,CAAC,KACN,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAE/B,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,gBAAgB,CAAgD;;IAgBxE,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,IAAI,EACzC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GACpB,uBAAuB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;IAe1C,cAAc,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAC3D,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,WAAW,GACpB,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAerC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAKjF,eAAe,CAAC,GAAG,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;CAIjF"}
@@ -0,0 +1,16 @@
1
+ import { DescService } from '@bufbuild/protobuf';
2
+ import { Client, Transport } from '@connectrpc/connect';
3
+ /**
4
+ * Create a gRPC client with retry logic for Deno's unsupported GOAWAY issue.
5
+ *
6
+ * This function makes use of ES6 Proxy classes to intercept method calls and retry on connection
7
+ * errors. Users must not mess with the returned client object or change the receiver (i.e. by
8
+ * using this client as the prototype for another object).
9
+ *
10
+ * This will also not work with gRPC streams, but could be extended to do so.
11
+ *
12
+ * @param service - The service descriptor.
13
+ * @returns A gRPC client with retry logic for connection errors.
14
+ */
15
+ export declare function createConnectRpcClient<T extends DescService>(service: T, transportFn: () => Transport): Client<T>;
16
+ //# sourceMappingURL=createConnectRpcClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createConnectRpcClient.d.ts","sourceRoot":"","sources":["../../../src/src/services/createConnectRpcClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACH,MAAM,EAIN,SAAS,EACZ,MAAM,qBAAqB,CAAC;AAM7B;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,WAAW,EACxD,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,MAAM,SAAS,GAC7B,MAAM,CAAC,CAAC,CAAC,CAsEX"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConnectRpcClient = createConnectRpcClient;
4
+ const connect_1 = require("@connectrpc/connect");
5
+ /**
6
+ * Create a gRPC client with retry logic for Deno's unsupported GOAWAY issue.
7
+ *
8
+ * This function makes use of ES6 Proxy classes to intercept method calls and retry on connection
9
+ * errors. Users must not mess with the returned client object or change the receiver (i.e. by
10
+ * using this client as the prototype for another object).
11
+ *
12
+ * This will also not work with gRPC streams, but could be extended to do so.
13
+ *
14
+ * @param service - The service descriptor.
15
+ * @returns A gRPC client with retry logic for connection errors.
16
+ */
17
+ function createConnectRpcClient(service, transportFn) {
18
+ function createClientInner() {
19
+ return (0, connect_1.createClient)(service, transportFn());
20
+ }
21
+ const handler = {
22
+ get(target, prop, receiver) {
23
+ const original = Reflect.get(target.value, prop, receiver);
24
+ if (typeof original !== 'function') {
25
+ return original;
26
+ }
27
+ return (...args) => {
28
+ try {
29
+ const result = Reflect.apply(original, receiver, args);
30
+ // If promise-like, attach retry-once logic
31
+ if (result && typeof result.then === 'function') {
32
+ return result.catch((error) => {
33
+ if (!(error instanceof connect_1.ConnectError)) {
34
+ throw error;
35
+ }
36
+ if (error.rawMessage.includes('connection error received: not a result of an error') &&
37
+ error.code === connect_1.Code.Internal) {
38
+ // Recreate client and retry once
39
+ target.value = createClientInner();
40
+ const rebound = Reflect.get(target.value, prop, receiver);
41
+ return Reflect.apply(rebound, receiver, args);
42
+ }
43
+ throw error;
44
+ });
45
+ }
46
+ // Non-promise results (e.g., streaming iterables) are returned as-is
47
+ return result;
48
+ }
49
+ catch (error) {
50
+ if (!(error instanceof connect_1.ConnectError)) {
51
+ throw error;
52
+ }
53
+ if (error.rawMessage.includes('connection error received: not a result of an error') && error.code === connect_1.Code.Internal) {
54
+ target.value = createClientInner();
55
+ const rebound = Reflect.get(target.value, prop, receiver);
56
+ return Reflect.apply(rebound, receiver, args);
57
+ }
58
+ throw error;
59
+ }
60
+ };
61
+ },
62
+ };
63
+ return new Proxy({
64
+ value: createClientInner(),
65
+ }, handler);
66
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"isTokenValid.d.ts","sourceRoot":"","sources":["../../../../src/src/services/credentials/isTokenValid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAI9C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAMvD"}
1
+ {"version":3,"file":"isTokenValid.d.ts","sourceRoot":"","sources":["../../../../src/src/services/credentials/isTokenValid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAI9C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAsBvD"}
@@ -7,5 +7,20 @@ function isTokenValid(t) {
7
7
  if (!t.expiry) {
8
8
  return true;
9
9
  }
10
+ // the timestamp for api key looks like this
11
+ // {
12
+ // "token": {
13
+ // "access_token": "dgfjdghjhfgjdfghj",
14
+ // "token_type": "",
15
+ // "expiry": {
16
+ // "seconds": "-62135596800",
17
+ // "nanos": 0
18
+ // }
19
+ // }
20
+ // }
21
+ // just hope and pray that it is valid
22
+ if (t.expiry.seconds <= 0) {
23
+ return true;
24
+ }
10
25
  return ((0, wkt_1.timestampMs)(t.expiry) - TOKEN_EXPIRY_JITTER_MS) > Date.now();
11
26
  }