@otonoma/paranet-client 2.14.2-rc.2 → 2.14.2-rc.8
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.
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +40 -3
- package/package.json +3 -2
- package/src/client.ts +45 -3
package/dist/client.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { HealthClient } from "./proto/grpc/health/v1/health.client";
|
|
|
9
9
|
export interface ParanetClientInit {
|
|
10
10
|
endpoint: string;
|
|
11
11
|
actorId?: string;
|
|
12
|
+
insecure?: boolean;
|
|
12
13
|
}
|
|
13
14
|
export interface PncpClientInit {
|
|
14
15
|
endpoint: string;
|
|
@@ -16,6 +17,7 @@ export interface PncpClientInit {
|
|
|
16
17
|
actorVersion?: string;
|
|
17
18
|
token?: string;
|
|
18
19
|
refreshToken?: string;
|
|
20
|
+
insecure?: boolean;
|
|
19
21
|
fetch?: any;
|
|
20
22
|
}
|
|
21
23
|
export declare class PncpClient {
|
|
@@ -104,6 +106,7 @@ export declare abstract class BaseClient {
|
|
|
104
106
|
protected refreshToken?: string;
|
|
105
107
|
protected tokenExp?: Date;
|
|
106
108
|
protected tokenCb?: (token: string, refresh: string) => void;
|
|
109
|
+
protected insecure: boolean;
|
|
107
110
|
constructor(init: ParanetClientInit);
|
|
108
111
|
getEndpoint(): string;
|
|
109
112
|
login(secret: LoginCredentials): Promise<TokenResponse>;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EAGb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAgB,eAAe,EAAE,mBAAmB,EAAuB,MAAM,oBAAoB,CAAC;AAE7G,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAY,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG7G,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,qBAAa,UAAU;IACrB,SAAS,EAAE,qBAAqB,CAAC;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;gBAEvC,IAAI,EAAE,cAAc;IA2BnB,WAAW,CAAC,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BxD,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAK7D,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ3D,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkCpE,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAMpE,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,YAAY;IAKhF,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,uBAAuB;IAI7D,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BtD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAe3C,MAAM;IAIN,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAY1C,UAAU,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI;IAIvD,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAIjD,YAAY,IAAI,OAAO;IAW9B,WAAW,IAAI,WAAW;IAOpB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAU9I;AAED,8BAAsB,eAAe,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,GAAG,IAAI;IAC1G,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAQ;IAEpC,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,EAAE,eAAe,CAAC;KACxB,CAAC;IAEF,SAAS,aAAa,MAAM,EAAE,UAAU;IAIxC,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAK3D,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAK9C,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAKzD,YAAY,CAAC,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAKjC,WAAW,CAAC,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAKhC,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAM/B,OAAO;IAIP,UAAU;IAOjB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,SAAM;CAqExD;AAED,qBAAa,YAAa,SAAQ,eAAe,CAAC,mBAAmB,EAAE,YAAY,CAAC;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;gBACV,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IAMxE,SAAS,CAAC,UAAU,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,CAAC;IAW3E,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI;CAIvD;AAED,UAAU,gBAAgB,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM;IACjE,MAAM,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,KAAK,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9F,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,qBAAa,uBAAwB,SAAQ,eAAe,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC;IAC9H,IAAI,EAAE,kBAAkB,CAAC;gBACb,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB;IAKxD,SAAS,CAAC,UAAU,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;IAOvF,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,IAAI;CAI3E;AAED,8BAAsB,UAAU;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAC1B,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEhB,IAAI,EAAE,iBAAiB;IAM5B,WAAW,IAAI,MAAM;IAKf,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBvD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAY3C,MAAM;IAIN,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAY1C,UAAU,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI;IAIvD,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAIjD,YAAY,IAAI,OAAO;cAWd,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;cAKhD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;cAKnF,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;cAKhC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyCpH,UAAU,IAAI,GAAG;CAMlB;AAED,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,IAAI,EAAE,iBAAiB;IAI5B,eAAe,IAAI,MAAM;IAOnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIvC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;IAY5D,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAsB5E,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;CAWhF;AAED,qBAAa,SAAU,SAAQ,UAAU;gBAC3B,IAAI,EAAE,iBAAiB;IAItB,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;CAG3C;AAED,MAAM,WAAW,gBAAgB;IAE/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAA;CACF"}
|
package/dist/client.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
// Wrapper client around the paranet broker and data service.
|
|
2
|
+
// undici is loaded dynamically only in Node.js when insecure mode is needed
|
|
3
|
+
let undiciModule = null;
|
|
4
|
+
async function getUndici() {
|
|
5
|
+
if (!undiciModule) {
|
|
6
|
+
undiciModule = await import('undici');
|
|
7
|
+
}
|
|
8
|
+
return undiciModule;
|
|
9
|
+
}
|
|
2
10
|
import { BrokerClient } from "./proto/broker.grpc.client";
|
|
3
11
|
import { ConversationMembership } from "./proto/identifiers";
|
|
4
12
|
import { SkillMatchStrategy, PncpMessageKind, } from "./proto/pncp";
|
|
@@ -13,11 +21,23 @@ export class PncpClient {
|
|
|
13
21
|
this.actorId = init.actorId;
|
|
14
22
|
this.endpoint = init.endpoint;
|
|
15
23
|
this.actorVersion = init.actorVersion;
|
|
24
|
+
var fetchFn = init.fetch;
|
|
25
|
+
// Note: insecure TLS bypass only works in Node.js with undici
|
|
26
|
+
// In browser environments, insecure mode is ignored (browsers don't allow TLS bypass)
|
|
27
|
+
if (!fetchFn && init.insecure && init.endpoint.startsWith("https") && typeof globalThis.process !== 'undefined' && globalThis.process?.versions?.node) {
|
|
28
|
+
// Synchronously check if undici is already loaded, otherwise load it lazily on first request
|
|
29
|
+
fetchFn = async (request, options) => {
|
|
30
|
+
const undici = await getUndici();
|
|
31
|
+
var fetchOptions = options || {};
|
|
32
|
+
fetchOptions.dispatcher = new undici.Agent({ connect: { rejectUnauthorized: false } });
|
|
33
|
+
return undici.fetch(request, fetchOptions);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
16
36
|
// TODO: Consider passing in transport config.
|
|
17
37
|
this.transport = new GrpcWebFetchTransport({
|
|
18
38
|
baseUrl: init.endpoint,
|
|
19
39
|
format: "binary",
|
|
20
|
-
fetch:
|
|
40
|
+
fetch: fetchFn,
|
|
21
41
|
// TODO: Consider other methods here.
|
|
22
42
|
});
|
|
23
43
|
this.inner = new BrokerClient(this.transport);
|
|
@@ -125,6 +145,9 @@ export class PncpClient {
|
|
|
125
145
|
case "password":
|
|
126
146
|
secret = { oneofKind: "password", password: creds.secret };
|
|
127
147
|
break;
|
|
148
|
+
case "jwt":
|
|
149
|
+
secret = { oneofKind: "jwt", jwt: creds.secret };
|
|
150
|
+
break;
|
|
128
151
|
default:
|
|
129
152
|
throw new Error("Invalid creds type");
|
|
130
153
|
}
|
|
@@ -349,6 +372,7 @@ export class BaseClient {
|
|
|
349
372
|
constructor(init) {
|
|
350
373
|
this.endpoint = cleanUrl(init.endpoint);
|
|
351
374
|
this.actorId = init.actorId;
|
|
375
|
+
this.insecure = init.insecure ?? false;
|
|
352
376
|
}
|
|
353
377
|
getEndpoint() {
|
|
354
378
|
return this.endpoint;
|
|
@@ -422,14 +446,27 @@ export class BaseClient {
|
|
|
422
446
|
}
|
|
423
447
|
async fetch(path, method, body, headers) {
|
|
424
448
|
let url = `${this.endpoint}/${path}`;
|
|
425
|
-
|
|
449
|
+
// Build fetch options, with optional TLS bypass for Node.js
|
|
450
|
+
let fetchOptions = {
|
|
426
451
|
method,
|
|
427
452
|
body,
|
|
428
453
|
headers: {
|
|
429
454
|
...(headers || {}),
|
|
430
455
|
...this.getHeaders(),
|
|
431
456
|
},
|
|
432
|
-
}
|
|
457
|
+
};
|
|
458
|
+
// For Node.js: bypass certificate verification if insecure mode is enabled
|
|
459
|
+
// Must use undici.fetch (not global fetch) for dispatcher option to work
|
|
460
|
+
// In browser environments, insecure mode is ignored (browsers don't allow TLS bypass)
|
|
461
|
+
const isNode = typeof globalThis.process !== 'undefined' && globalThis.process?.versions?.node;
|
|
462
|
+
const mkFetch = async () => {
|
|
463
|
+
if (this.insecure && isNode) {
|
|
464
|
+
const undici = await getUndici();
|
|
465
|
+
fetchOptions.dispatcher = new undici.Agent({ connect: { rejectUnauthorized: false } });
|
|
466
|
+
return undici.fetch(url, fetchOptions);
|
|
467
|
+
}
|
|
468
|
+
return fetch(url, fetchOptions);
|
|
469
|
+
};
|
|
433
470
|
let response = await mkFetch();
|
|
434
471
|
if (response.status == 401) {
|
|
435
472
|
await this.refreshAuth();
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"type": "git",
|
|
5
5
|
"url": "git+https://github.com/otonoma/paranet-broker.git"
|
|
6
6
|
},
|
|
7
|
-
"version": "2.14.2-rc.
|
|
7
|
+
"version": "2.14.2-rc.8",
|
|
8
8
|
"description": "",
|
|
9
9
|
"license": "SEE LICENSE IN LICENSE",
|
|
10
10
|
"author": "otonoma",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"@protobuf-ts/grpcweb-transport": "^2.11.1",
|
|
23
23
|
"@protobuf-ts/runtime": "^2.11.1",
|
|
24
24
|
"@protobuf-ts/runtime-rpc": "^2.11.1",
|
|
25
|
-
"jwt-decode": "^4.0.0"
|
|
25
|
+
"jwt-decode": "^4.0.0",
|
|
26
|
+
"undici": "^6.27.0"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
29
|
"@protobuf-ts/plugin": "^2.9.4",
|
package/src/client.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
// Wrapper client around the paranet broker and data service.
|
|
2
2
|
|
|
3
|
+
// undici is loaded dynamically only in Node.js when insecure mode is needed
|
|
4
|
+
let undiciModule: typeof import('undici') | null = null;
|
|
5
|
+
|
|
6
|
+
async function getUndici(): Promise<typeof import('undici')> {
|
|
7
|
+
if (!undiciModule) {
|
|
8
|
+
undiciModule = await import('undici');
|
|
9
|
+
}
|
|
10
|
+
return undiciModule;
|
|
11
|
+
}
|
|
3
12
|
import { BrokerClient } from "./proto/broker.grpc.client";
|
|
4
13
|
import { ConversationId, ConversationMembership } from "./proto/identifiers";
|
|
5
14
|
import {
|
|
@@ -24,6 +33,7 @@ import { HealthCheckRequest, HealthCheckResponse_ServingStatus } from "./proto/g
|
|
|
24
33
|
export interface ParanetClientInit {
|
|
25
34
|
endpoint: string;
|
|
26
35
|
actorId?: string;
|
|
36
|
+
insecure?: boolean;
|
|
27
37
|
}
|
|
28
38
|
|
|
29
39
|
export interface PncpClientInit {
|
|
@@ -32,6 +42,7 @@ export interface PncpClientInit {
|
|
|
32
42
|
actorVersion?: string;
|
|
33
43
|
token?: string;
|
|
34
44
|
refreshToken?: string;
|
|
45
|
+
insecure?: boolean;
|
|
35
46
|
// Allows overriding the fetch implementation, needed for non-web UIs that don't provide
|
|
36
47
|
// a complete fetch implementation by default (e.g. react-native).
|
|
37
48
|
fetch?: any;
|
|
@@ -53,11 +64,23 @@ export class PncpClient {
|
|
|
53
64
|
this.actorId = init.actorId;
|
|
54
65
|
this.endpoint = init.endpoint;
|
|
55
66
|
this.actorVersion = init.actorVersion;
|
|
67
|
+
var fetchFn = init.fetch;
|
|
68
|
+
// Note: insecure TLS bypass only works in Node.js with undici
|
|
69
|
+
// In browser environments, insecure mode is ignored (browsers don't allow TLS bypass)
|
|
70
|
+
if (!fetchFn && init.insecure && init.endpoint.startsWith("https") && typeof globalThis.process !== 'undefined' && globalThis.process?.versions?.node) {
|
|
71
|
+
// Synchronously check if undici is already loaded, otherwise load it lazily on first request
|
|
72
|
+
fetchFn = async (request: any, options?: object) => {
|
|
73
|
+
const undici = await getUndici();
|
|
74
|
+
var fetchOptions: any = options || {};
|
|
75
|
+
fetchOptions.dispatcher = new undici.Agent({ connect: { rejectUnauthorized: false } });
|
|
76
|
+
return undici.fetch(request, fetchOptions);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
56
79
|
// TODO: Consider passing in transport config.
|
|
57
80
|
this.transport = new GrpcWebFetchTransport({
|
|
58
81
|
baseUrl: init.endpoint,
|
|
59
82
|
format: "binary",
|
|
60
|
-
fetch:
|
|
83
|
+
fetch: fetchFn,
|
|
61
84
|
// TODO: Consider other methods here.
|
|
62
85
|
});
|
|
63
86
|
this.inner = new BrokerClient(this.transport);
|
|
@@ -174,6 +197,7 @@ export class PncpClient {
|
|
|
174
197
|
case "token":
|
|
175
198
|
secret = { oneofKind: "token", token: creds.secret }; break;
|
|
176
199
|
case "password": secret = { oneofKind: "password", password: creds.secret }; break;
|
|
200
|
+
case "jwt": secret = { oneofKind: "jwt", jwt: creds.secret }; break;
|
|
177
201
|
default:
|
|
178
202
|
throw new Error("Invalid creds type");
|
|
179
203
|
}
|
|
@@ -455,10 +479,12 @@ export abstract class BaseClient {
|
|
|
455
479
|
protected refreshToken?: string;
|
|
456
480
|
protected tokenExp?: Date;
|
|
457
481
|
protected tokenCb?: (token: string, refresh: string) => void;
|
|
482
|
+
protected insecure: boolean;
|
|
458
483
|
|
|
459
484
|
constructor(init: ParanetClientInit) {
|
|
460
485
|
this.endpoint = cleanUrl(init.endpoint);
|
|
461
486
|
this.actorId = init.actorId;
|
|
487
|
+
this.insecure = init.insecure ?? false;
|
|
462
488
|
}
|
|
463
489
|
|
|
464
490
|
public getEndpoint(): string {
|
|
@@ -552,14 +578,30 @@ export abstract class BaseClient {
|
|
|
552
578
|
|
|
553
579
|
protected async fetch(path: string, method: string, body?: any, headers?: Record<string, string>): Promise<Response> {
|
|
554
580
|
let url = `${this.endpoint}/${path}`;
|
|
555
|
-
|
|
581
|
+
|
|
582
|
+
// Build fetch options, with optional TLS bypass for Node.js
|
|
583
|
+
let fetchOptions: RequestInit & { dispatcher?: any } = {
|
|
556
584
|
method,
|
|
557
585
|
body,
|
|
558
586
|
headers: {
|
|
559
587
|
...(headers || {}),
|
|
560
588
|
...this.getHeaders(),
|
|
561
589
|
},
|
|
562
|
-
}
|
|
590
|
+
};
|
|
591
|
+
|
|
592
|
+
// For Node.js: bypass certificate verification if insecure mode is enabled
|
|
593
|
+
// Must use undici.fetch (not global fetch) for dispatcher option to work
|
|
594
|
+
// In browser environments, insecure mode is ignored (browsers don't allow TLS bypass)
|
|
595
|
+
const isNode = typeof globalThis.process !== 'undefined' && globalThis.process?.versions?.node;
|
|
596
|
+
const mkFetch = async (): Promise<Response> => {
|
|
597
|
+
if (this.insecure && isNode) {
|
|
598
|
+
const undici = await getUndici();
|
|
599
|
+
fetchOptions.dispatcher = new undici.Agent({ connect: { rejectUnauthorized: false } });
|
|
600
|
+
return undici.fetch(url, fetchOptions as any) as unknown as Response;
|
|
601
|
+
}
|
|
602
|
+
return fetch(url, fetchOptions);
|
|
603
|
+
};
|
|
604
|
+
|
|
563
605
|
let response = await mkFetch();
|
|
564
606
|
if (response.status == 401) {
|
|
565
607
|
await this.refreshAuth();
|