@optimizely-opal/opal-tool-ocp-sdk 0.0.0-devmg.12 → 1.0.0-beta.1
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/README.md +108 -15
- package/dist/auth/AuthUtils.d.ts +26 -0
- package/dist/auth/AuthUtils.d.ts.map +1 -0
- package/dist/auth/AuthUtils.js +109 -0
- package/dist/auth/AuthUtils.js.map +1 -0
- package/dist/auth/AuthUtils.test.d.ts +2 -0
- package/dist/auth/AuthUtils.test.d.ts.map +1 -0
- package/dist/auth/AuthUtils.test.js +601 -0
- package/dist/auth/AuthUtils.test.js.map +1 -0
- package/dist/auth/TokenVerifier.d.ts.map +1 -1
- package/dist/auth/TokenVerifier.js +0 -1
- package/dist/auth/TokenVerifier.js.map +1 -1
- package/dist/auth/TokenVerifier.test.js +9 -0
- package/dist/auth/TokenVerifier.test.js.map +1 -1
- package/dist/function/GlobalToolFunction.d.ts +27 -0
- package/dist/function/GlobalToolFunction.d.ts.map +1 -0
- package/dist/function/GlobalToolFunction.js +53 -0
- package/dist/function/GlobalToolFunction.js.map +1 -0
- package/dist/function/GlobalToolFunction.test.d.ts +2 -0
- package/dist/function/GlobalToolFunction.test.d.ts.map +1 -0
- package/dist/function/GlobalToolFunction.test.js +425 -0
- package/dist/function/GlobalToolFunction.test.js.map +1 -0
- package/dist/function/ToolFunction.d.ts +1 -2
- package/dist/function/ToolFunction.d.ts.map +1 -1
- package/dist/function/ToolFunction.js +3 -36
- package/dist/function/ToolFunction.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/service/Service.d.ts +8 -7
- package/dist/service/Service.d.ts.map +1 -1
- package/dist/service/Service.js.map +1 -1
- package/package.json +3 -4
- package/src/auth/AuthUtils.test.ts +729 -0
- package/src/auth/AuthUtils.ts +117 -0
- package/src/auth/TokenVerifier.test.ts +11 -0
- package/src/auth/TokenVerifier.ts +0 -1
- package/src/function/GlobalToolFunction.test.ts +505 -0
- package/src/function/GlobalToolFunction.ts +56 -0
- package/src/function/ToolFunction.ts +4 -42
- package/src/index.ts +1 -0
- package/src/service/Service.ts +33 -9
package/README.md
CHANGED
|
@@ -7,8 +7,9 @@ A TypeScript SDK for building Opal tools in Optimizely Connect Platform. This SD
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- 🎯 **Decorator-based Tool Registration** - Use `@tool` and `@interaction` decorators to easily register functions
|
|
10
|
+
- 🌐 **Global and Regular Function Modes** - SDK can be used in either global or organization-scoped mode
|
|
10
11
|
- 🔧 **Type-safe Development** - Full TypeScript support with comprehensive type definitions
|
|
11
|
-
- 🏗️ **Abstract Base Classes** - Extend `ToolFunction` for standardized request processing
|
|
12
|
+
- 🏗️ **Abstract Base Classes** - Extend `ToolFunction` or `GlobalToolFunction` for standardized request processing
|
|
12
13
|
- 🔐 **Authentication Support** - OptiID authentication
|
|
13
14
|
- 🛡️ **Authorization Support** - OptiID token tool authorization
|
|
14
15
|
- 📝 **Parameter Validation** - Define and validate tool parameters with types
|
|
@@ -28,7 +29,14 @@ yarn add @optimizely-opal/opal-tool-ocp-sdk
|
|
|
28
29
|
|
|
29
30
|
## Quick Start
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
The SDK supports two function modes:
|
|
33
|
+
|
|
34
|
+
- **Regular Functions** (`ToolFunction`) - Organization-scoped functions that validate customer organization IDs
|
|
35
|
+
- **Global Functions** (`GlobalToolFunction`) - Platform-wide functions that work across all organizations
|
|
36
|
+
|
|
37
|
+
### Regular Tool Function
|
|
38
|
+
|
|
39
|
+
Create a tool function class by extending `ToolFunction` for organization-scoped functionality:
|
|
32
40
|
|
|
33
41
|
```typescript
|
|
34
42
|
import { ToolFunction, tool, interaction, ParameterType, InteractionResult, OptiIdAuthData } from '@optimizely-opal/opal-tool-ocp-sdk';
|
|
@@ -89,12 +97,12 @@ export class MyToolFunction extends ToolFunction {
|
|
|
89
97
|
throw new Error('OptiID authentication required');
|
|
90
98
|
}
|
|
91
99
|
|
|
92
|
-
const {
|
|
100
|
+
const { customer_id, instance_id, access_token } = authData.credentials;
|
|
93
101
|
return {
|
|
94
102
|
id: '456',
|
|
95
103
|
title: params.title,
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
customer_id,
|
|
105
|
+
instance_id
|
|
98
106
|
};
|
|
99
107
|
}
|
|
100
108
|
|
|
@@ -112,7 +120,47 @@ export class MyToolFunction extends ToolFunction {
|
|
|
112
120
|
}
|
|
113
121
|
```
|
|
114
122
|
|
|
115
|
-
|
|
123
|
+
### Global Tool Function
|
|
124
|
+
|
|
125
|
+
Create a global tool function by extending `GlobalToolFunction` for platform-wide functionality:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { GlobalToolFunction, tool, interaction, ParameterType, InteractionResult, OptiIdAuthData } from '@optimizely-opal/opal-tool-ocp-sdk';
|
|
129
|
+
|
|
130
|
+
export class MyGlobalToolFunction extends GlobalToolFunction {
|
|
131
|
+
|
|
132
|
+
@tool({
|
|
133
|
+
name: 'global_utility',
|
|
134
|
+
description: 'A utility tool available to all organizations',
|
|
135
|
+
endpoint: '/global-utility',
|
|
136
|
+
parameters: [
|
|
137
|
+
{
|
|
138
|
+
name: 'operation',
|
|
139
|
+
type: ParameterType.String,
|
|
140
|
+
description: 'The operation to perform',
|
|
141
|
+
required: true
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
async globalUtility(params: { operation: string }, authData?: OptiIdAuthData) {
|
|
146
|
+
return {
|
|
147
|
+
result: `Performed ${params.operation} globally`,
|
|
148
|
+
organizationId: authData?.credentials.customer_id || 'unknown'
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Function Modes
|
|
155
|
+
|
|
156
|
+
The SDK operates in one of two modes based on the base class you extend:
|
|
157
|
+
|
|
158
|
+
- **Regular Function Mode** (`ToolFunction`): All tools are organization-scoped and validate organization IDs
|
|
159
|
+
- **Global Function Mode** (`GlobalToolFunction`): All tools are platform-wide.
|
|
160
|
+
|
|
161
|
+
The discovery endpoint returns all tools registered within that function mode.
|
|
162
|
+
|
|
163
|
+
Your function class inherits a `perform()` method from `ToolFunction` or `GlobalToolFunction` that serves as the main entry point for handling all incoming requests. When called, the SDK automatically:
|
|
116
164
|
|
|
117
165
|
- **Routes requests** to your registered tools and interactions based on endpoints
|
|
118
166
|
- **Handles authentication** and OptiID token validation before calling your methods
|
|
@@ -129,6 +177,28 @@ Tools are functions that can be discovered and executed through the OCP platform
|
|
|
129
177
|
- Define parameters with types and validation
|
|
130
178
|
- Can require authentication
|
|
131
179
|
- Return structured responses
|
|
180
|
+
- Are automatically registered based on the function mode you choose
|
|
181
|
+
|
|
182
|
+
### Function Modes
|
|
183
|
+
|
|
184
|
+
#### Regular Functions (`ToolFunction`)
|
|
185
|
+
|
|
186
|
+
Regular functions are scoped to specific organizations and validate that requests come from the same organization:
|
|
187
|
+
|
|
188
|
+
- Validate OptiID organization ID matches the function's organization context
|
|
189
|
+
- All tools within the function are organization-scoped
|
|
190
|
+
- **Per-Organization Configuration**: Can implement organization-specific configuration, authentication credentials, and API keys since they're tied to a single organization
|
|
191
|
+
- **Per-Organization Authentication**: Can store and use organization-specific authentication tokens, connection strings, and other sensitive data securely
|
|
192
|
+
|
|
193
|
+
#### Global Functions (`GlobalToolFunction`)
|
|
194
|
+
|
|
195
|
+
Global functions work across all organizations without organization validation:
|
|
196
|
+
|
|
197
|
+
- Accept OptiID authentication
|
|
198
|
+
- All tools within the function are platform-wide
|
|
199
|
+
- **No Per-Organization Configuration**: Cannot implement per-organization configuration since they work across all organizations
|
|
200
|
+
- **No Per-Organization Authentication**: Cannot store organization-specific credentials or authentication data
|
|
201
|
+
- **Global Discovery**: Have a global discovery URL that can be used by any organization without requiring them to install the app first
|
|
132
202
|
|
|
133
203
|
### Interactions
|
|
134
204
|
|
|
@@ -175,7 +245,8 @@ The SDK automatically handles OptiID token validation for tool authorization. Op
|
|
|
175
245
|
|
|
176
246
|
**Token Validation:**
|
|
177
247
|
- The SDK extracts and validates OptiID tokens from the request body
|
|
178
|
-
- Validation includes verifying that requests come from the same organization
|
|
248
|
+
- **Regular Tools**: Validation includes verifying that requests come from the same organization as the tool
|
|
249
|
+
- **Global Tools**: Token validation occurs but organization ID matching is skipped
|
|
179
250
|
- If validation fails, returns HTTP 403 Unauthorized before reaching your handler methods
|
|
180
251
|
- No additional configuration needed - validation is handled automatically
|
|
181
252
|
|
|
@@ -220,6 +291,7 @@ async handlerMethod(
|
|
|
220
291
|
- **params**: The input parameters for tools, or interaction data for webhooks
|
|
221
292
|
- **authData**: Available when OptiID user authentication is configured and successful
|
|
222
293
|
|
|
294
|
+
|
|
223
295
|
### Decorators
|
|
224
296
|
|
|
225
297
|
#### `@tool(config: ToolConfig)`
|
|
@@ -251,7 +323,7 @@ interface InteractionConfig {
|
|
|
251
323
|
|
|
252
324
|
#### `ToolFunction`
|
|
253
325
|
|
|
254
|
-
Abstract base class for OCP functions:
|
|
326
|
+
Abstract base class for organization-scoped OCP functions:
|
|
255
327
|
|
|
256
328
|
```typescript
|
|
257
329
|
export abstract class ToolFunction extends Function {
|
|
@@ -260,7 +332,20 @@ export abstract class ToolFunction extends Function {
|
|
|
260
332
|
}
|
|
261
333
|
```
|
|
262
334
|
|
|
263
|
-
Extend this class
|
|
335
|
+
Extend this class for regular tools that validate organization IDs. The `perform` method automatically routes requests to registered tools and enforces organization validation.
|
|
336
|
+
|
|
337
|
+
#### `GlobalToolFunction`
|
|
338
|
+
|
|
339
|
+
Abstract base class for global OCP functions:
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
export abstract class GlobalToolFunction extends GlobalFunction {
|
|
343
|
+
protected ready(): Promise<boolean>;
|
|
344
|
+
public async perform(): Promise<Response>;
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Extend this class for tools that work across organizations. The `perform` method routes requests to registered tools but skips organization validation for tools.
|
|
264
349
|
|
|
265
350
|
### Models
|
|
266
351
|
|
|
@@ -279,7 +364,14 @@ The SDK automatically provides two important endpoints:
|
|
|
279
364
|
|
|
280
365
|
### Discovery Endpoint (`/discovery`)
|
|
281
366
|
|
|
282
|
-
Returns all registered tools in the proper OCP format for platform integration:
|
|
367
|
+
Returns all registered tools in the proper OCP format for platform integration. The discovery endpoint returns all tools registered within the function, regardless of their individual configuration:
|
|
368
|
+
|
|
369
|
+
- **Regular Functions** (`ToolFunction`): Returns all tools with organization-scoped behavior
|
|
370
|
+
- **Global Functions** (`GlobalToolFunction`): Returns all tools with platform-wide behavior
|
|
371
|
+
|
|
372
|
+
All tools within a function operate in the same mode - there is no mixing of global and organization-scoped tools within a single function.
|
|
373
|
+
|
|
374
|
+
Example response for a regular function and global function:
|
|
283
375
|
|
|
284
376
|
```json
|
|
285
377
|
{
|
|
@@ -396,9 +488,9 @@ export class AuthenticatedFunction extends ToolFunction {
|
|
|
396
488
|
async secureOperation(params: unknown, authData?: OptiIdAuthData) {
|
|
397
489
|
if (!authData) throw new Error('OptiID authentication required');
|
|
398
490
|
|
|
399
|
-
const {
|
|
491
|
+
const { customer_id, access_token } = authData.credentials;
|
|
400
492
|
// Use OptiID credentials for API calls
|
|
401
|
-
return { success: true,
|
|
493
|
+
return { success: true, customer_id };
|
|
402
494
|
}
|
|
403
495
|
|
|
404
496
|
// Interaction with authentication example
|
|
@@ -411,11 +503,11 @@ export class AuthenticatedFunction extends ToolFunction {
|
|
|
411
503
|
return new InteractionResult('Authentication required for webhook processing');
|
|
412
504
|
}
|
|
413
505
|
|
|
414
|
-
const {
|
|
506
|
+
const { customer_id } = authData.credentials;
|
|
415
507
|
|
|
416
508
|
// Process webhook data with authentication context
|
|
417
509
|
return new InteractionResult(
|
|
418
|
-
`Webhook processed for customer ${
|
|
510
|
+
`Webhook processed for customer ${customer_id}: ${data.eventType}`,
|
|
419
511
|
`https://app.example.com/events/${data.eventId}`
|
|
420
512
|
);
|
|
421
513
|
}
|
|
@@ -433,7 +525,8 @@ src/
|
|
|
433
525
|
│ ├── index.ts
|
|
434
526
|
│ ├── TaskTool.ts
|
|
435
527
|
│ └── NotificationTool.ts
|
|
436
|
-
|
|
528
|
+
├── MyToolFunction.ts
|
|
529
|
+
└── MyGlobalToolFunction.ts
|
|
437
530
|
```
|
|
438
531
|
|
|
439
532
|
**tools/TaskTool.ts:**
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OptiIdAuthData } from '../types/Models';
|
|
2
|
+
/**
|
|
3
|
+
* Extract and validate basic OptiID authentication data from request
|
|
4
|
+
*
|
|
5
|
+
* @param request - The incoming request
|
|
6
|
+
* @returns object with authData and accessToken, or null if invalid
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractAuthData(request: any): {
|
|
9
|
+
authData: OptiIdAuthData;
|
|
10
|
+
accessToken: string;
|
|
11
|
+
} | null;
|
|
12
|
+
/**
|
|
13
|
+
* Authenticate a request for regular functions (with organization validation)
|
|
14
|
+
*
|
|
15
|
+
* @param request - The incoming request
|
|
16
|
+
* @returns true if authentication and authorization succeed
|
|
17
|
+
*/
|
|
18
|
+
export declare function authenticateRegularRequest(request: any): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Authenticate a request for global functions (without organization validation)
|
|
21
|
+
*
|
|
22
|
+
* @param request - The incoming request
|
|
23
|
+
* @returns true if authentication succeeds
|
|
24
|
+
*/
|
|
25
|
+
export declare function authenticateGlobalRequest(request: any): Promise<boolean>;
|
|
26
|
+
//# sourceMappingURL=AuthUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUtils.d.ts","sourceRoot":"","sources":["../../src/auth/AuthUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAqBjD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQtG;AA6DD;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/E;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractAuthData = extractAuthData;
|
|
4
|
+
exports.authenticateRegularRequest = authenticateRegularRequest;
|
|
5
|
+
exports.authenticateGlobalRequest = authenticateGlobalRequest;
|
|
6
|
+
const app_sdk_1 = require("@zaiusinc/app-sdk");
|
|
7
|
+
const TokenVerifier_1 = require("./TokenVerifier");
|
|
8
|
+
/**
|
|
9
|
+
* Validate the OptiID access token
|
|
10
|
+
*
|
|
11
|
+
* @param accessToken - The access token to validate
|
|
12
|
+
* @returns true if the token is valid
|
|
13
|
+
*/
|
|
14
|
+
async function validateAccessToken(accessToken) {
|
|
15
|
+
try {
|
|
16
|
+
if (!accessToken) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const tokenVerifier = await (0, TokenVerifier_1.getTokenVerifier)();
|
|
20
|
+
return await tokenVerifier.verify(accessToken);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
app_sdk_1.logger.error('OptiID token validation failed:', error);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extract and validate basic OptiID authentication data from request
|
|
29
|
+
*
|
|
30
|
+
* @param request - The incoming request
|
|
31
|
+
* @returns object with authData and accessToken, or null if invalid
|
|
32
|
+
*/
|
|
33
|
+
function extractAuthData(request) {
|
|
34
|
+
const authData = request?.bodyJSON?.auth;
|
|
35
|
+
const accessToken = authData?.credentials?.access_token;
|
|
36
|
+
if (!accessToken || authData?.provider?.toLowerCase() !== 'optiid') {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return { authData, accessToken };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate organization ID matches the app context
|
|
43
|
+
*
|
|
44
|
+
* @param customerId - The customer ID from the auth data
|
|
45
|
+
* @returns true if the organization ID is valid
|
|
46
|
+
*/
|
|
47
|
+
function validateOrganizationId(customerId) {
|
|
48
|
+
if (!customerId) {
|
|
49
|
+
app_sdk_1.logger.error('Organisation ID is required but not provided');
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const appOrganisationId = (0, app_sdk_1.getAppContext)()?.account?.organizationId;
|
|
53
|
+
if (customerId !== appOrganisationId) {
|
|
54
|
+
app_sdk_1.logger.error(`Invalid organisation ID: expected ${appOrganisationId}, received ${customerId}`);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a request should skip authentication (discovery/ready endpoints)
|
|
61
|
+
*
|
|
62
|
+
* @param request - The incoming request
|
|
63
|
+
* @returns true if auth should be skipped
|
|
64
|
+
*/
|
|
65
|
+
function shouldSkipAuth(request) {
|
|
66
|
+
return request.path === '/discovery' || request.path === '/ready';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Core authentication flow - extracts auth data and validates token
|
|
70
|
+
*
|
|
71
|
+
* @param request - The incoming request
|
|
72
|
+
* @param validateOrg - Whether to validate organization ID
|
|
73
|
+
* @returns true if authentication succeeds
|
|
74
|
+
*/
|
|
75
|
+
async function authenticateRequest(request, validateOrg) {
|
|
76
|
+
if (shouldSkipAuth(request)) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
const authInfo = extractAuthData(request);
|
|
80
|
+
if (!authInfo) {
|
|
81
|
+
app_sdk_1.logger.error('OptiID token is required but not provided');
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const { authData, accessToken } = authInfo;
|
|
85
|
+
// Validate organization ID if required
|
|
86
|
+
if (validateOrg && !validateOrganizationId(authData.credentials?.customer_id)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return await validateAccessToken(accessToken);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Authenticate a request for regular functions (with organization validation)
|
|
93
|
+
*
|
|
94
|
+
* @param request - The incoming request
|
|
95
|
+
* @returns true if authentication and authorization succeed
|
|
96
|
+
*/
|
|
97
|
+
async function authenticateRegularRequest(request) {
|
|
98
|
+
return await authenticateRequest(request, true);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Authenticate a request for global functions (without organization validation)
|
|
102
|
+
*
|
|
103
|
+
* @param request - The incoming request
|
|
104
|
+
* @returns true if authentication succeeds
|
|
105
|
+
*/
|
|
106
|
+
async function authenticateGlobalRequest(request) {
|
|
107
|
+
return await authenticateRequest(request, false);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=AuthUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUtils.js","sourceRoot":"","sources":["../../src/auth/AuthUtils.ts"],"names":[],"mappings":";;AA6BA,0CAQC;AAmED,gEAEC;AAQD,8DAEC;AApHD,+CAA0D;AAC1D,mDAAmD;AAGnD;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAAC,WAA+B;IAChE,IAAI,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,IAAA,gCAAgB,GAAE,CAAC;QAC/C,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,OAAY;IAC1C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAsB,CAAC;IAC3D,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC;IACxD,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,UAA8B;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,gBAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAA,uBAAa,GAAE,EAAE,OAAO,EAAE,cAAc,CAAC;IACnE,IAAI,UAAU,KAAK,iBAAiB,EAAE,CAAC;QACrC,gBAAM,CAAC,KAAK,CAAC,qCAAqC,iBAAiB,cAAc,UAAU,EAAE,CAAC,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAY;IAClC,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAAY,EAAE,WAAoB;IACnE,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,gBAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAE3C,uCAAuC;IACvC,IAAI,WAAW,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,0BAA0B,CAAC,OAAY;IAC3D,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,yBAAyB,CAAC,OAAY;IAC1D,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthUtils.test.d.ts","sourceRoot":"","sources":["../../src/auth/AuthUtils.test.ts"],"names":[],"mappings":""}
|