@azure-rest/confidential-ledger 1.1.2-beta.3 → 1.1.2-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.
- package/README.md +173 -1
- package/dist/commonjs/confidentialLedger.d.ts.map +1 -1
- package/dist/commonjs/confidentialLedger.js +74 -12
- package/dist/commonjs/confidentialLedger.js.map +1 -1
- package/dist/commonjs/confidentialLedgerCustomized.js +7 -5
- package/dist/commonjs/confidentialLedgerCustomized.js.map +1 -1
- package/dist/commonjs/isUnexpected.js +4 -5
- package/dist/commonjs/isUnexpected.js.map +1 -1
- package/dist/commonjs/paginateHelper.js +43 -73
- package/dist/commonjs/paginateHelper.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +11 -11
- package/dist/esm/confidentialLedger.d.ts.map +1 -1
- package/dist/esm/confidentialLedger.js +74 -12
- package/dist/esm/confidentialLedger.js.map +1 -1
- package/dist/esm/confidentialLedgerCustomized.js +7 -5
- package/dist/esm/confidentialLedgerCustomized.js.map +1 -1
- package/dist/esm/isUnexpected.js +4 -5
- package/dist/esm/isUnexpected.js.map +1 -1
- package/dist/esm/paginateHelper.js +43 -73
- package/dist/esm/paginateHelper.js.map +1 -1
- package/package.json +37 -33
package/README.md
CHANGED
|
@@ -99,6 +99,11 @@ const client = ConfidentialLedger(
|
|
|
99
99
|
|
|
100
100
|
Every write to Azure Confidential Ledger generates an immutable ledger entry in the service. Writes, also referred to as transactions, are uniquely identified by transaction ids that increment with each write. Once written, ledger entries may be retrieved at any time.
|
|
101
101
|
|
|
102
|
+
#### Tags
|
|
103
|
+
It is possible to further organize data within a collection as part of the latest preview version dated `2024-12-09-preview` or newer.
|
|
104
|
+
|
|
105
|
+
Specify the `tags` parameter as part of the create entry operation. Multiple tags can be specified using commas. There is a limit of five tags per transaction.
|
|
106
|
+
|
|
102
107
|
### Receipts
|
|
103
108
|
|
|
104
109
|
State changes to the Confidential Ledger are saved in a data structure called a Merkle tree. To cryptographically verify that writes were correctly saved, a Merkle proof, or receipt, can be retrieved for any transaction id.
|
|
@@ -126,8 +131,14 @@ Azure Confidential Ledger is built on Microsoft Research's open-source [Confiden
|
|
|
126
131
|
This section contains code snippets for the following samples:
|
|
127
132
|
|
|
128
133
|
- [Post Ledger Entry](#post-ledger-entry "Post Ledger Entry")
|
|
134
|
+
- [Post Ledger Entry With CollectionId](#post-ledger-entry-with-collectionid "Post Ledger Entry With CollectionId")]
|
|
135
|
+
- [Post Ledger Entry With CollectionId and Tags](#post-ledger-entry-with-collectionid-and-tags "Post Ledger Entry With CollectionId and Tags")]
|
|
129
136
|
- [Get a Ledger Entry By Transaction Id](#get-a-ledger-entry "Get a Ledger Entry By Transaction Id")
|
|
137
|
+
- [Get a Ledger Entry By Transaction Id With CollectionId](#get-a-ledger-entry-with-collectionid "Get a Ledger Entry By Transaction Id With CollectionId")
|
|
138
|
+
- [Get a Ledger Entry By Transaction Id With CollectionId and Tag](#get-a-ledger-entry-with-collectionid-and-tag "Get a Ledger Entry By Transaction Id With CollectionId and Tag")
|
|
130
139
|
- [Get All Ledger Entries](#get-all-ledger-entries "Get All Ledger Entries")
|
|
140
|
+
- [Get All Ledger Entries With CollectionId](#get-all-ledger-entries-with-collectionid "Get All Ledger Entries With CollectionId")
|
|
141
|
+
- [Get All Ledger Entries With CollectionId and Tag](#get-all-ledger-entries-with-collectionid-and-tag "Get All Ledger Entries With CollectionId and Tag")
|
|
131
142
|
- [Get All Collections](#get-all-collections "Get All Collections")
|
|
132
143
|
- [Get Transactions for a Collection](#transactions-for-collection "Get Transactions for a Collection")
|
|
133
144
|
- [List Enclave Quotes](#list-enclave-quotes "List Enclave Quotes")
|
|
@@ -164,6 +175,73 @@ const ledgerEntry: CreateLedgerEntryParameters = {
|
|
|
164
175
|
const result = await client.path("/app/transactions").post(ledgerEntry);
|
|
165
176
|
```
|
|
166
177
|
|
|
178
|
+
### Post Ledger Entry With CollectionId
|
|
179
|
+
|
|
180
|
+
```ts snippet:ReadmeSamplePostLedgerEntryWithCollectionId
|
|
181
|
+
import ConfidentialLedger, {
|
|
182
|
+
getLedgerIdentity,
|
|
183
|
+
LedgerEntry,
|
|
184
|
+
CreateLedgerEntryParameters,
|
|
185
|
+
} from "@azure-rest/confidential-ledger";
|
|
186
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
187
|
+
|
|
188
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
189
|
+
"test-ledger-name",
|
|
190
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
191
|
+
);
|
|
192
|
+
const credential = new DefaultAzureCredential();
|
|
193
|
+
const client = ConfidentialLedger(
|
|
194
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
195
|
+
ledgerIdentityCertificate,
|
|
196
|
+
credential,
|
|
197
|
+
);
|
|
198
|
+
// Type assertion is used to allow collectionId
|
|
199
|
+
const entry: LedgerEntry = {
|
|
200
|
+
contents: "<content>",
|
|
201
|
+
};
|
|
202
|
+
const ledgerEntry: CreateLedgerEntryParameters = {
|
|
203
|
+
queryParameters: {
|
|
204
|
+
collectionId: "my collection",
|
|
205
|
+
},
|
|
206
|
+
contentType: "application/json",
|
|
207
|
+
body: entry,
|
|
208
|
+
};
|
|
209
|
+
const result = await client.path("/app/transactions").post(ledgerEntry);
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Post Ledger Entry With CollectionId and Tags
|
|
213
|
+
```ts snippet:ReadmeSamplePostLedgerEntryWithCollectionIdAndTags
|
|
214
|
+
import ConfidentialLedger, {
|
|
215
|
+
getLedgerIdentity,
|
|
216
|
+
LedgerEntry,
|
|
217
|
+
CreateLedgerEntryParameters,
|
|
218
|
+
} from "@azure-rest/confidential-ledger";
|
|
219
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
220
|
+
|
|
221
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
222
|
+
"test-ledger-name",
|
|
223
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
224
|
+
);
|
|
225
|
+
const credential = new DefaultAzureCredential();
|
|
226
|
+
const client = ConfidentialLedger(
|
|
227
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
228
|
+
ledgerIdentityCertificate,
|
|
229
|
+
credential,
|
|
230
|
+
);
|
|
231
|
+
// Type assertion is used to allow collectionId and tags
|
|
232
|
+
const entry: LedgerEntry = {
|
|
233
|
+
contents: "<content>",
|
|
234
|
+
};
|
|
235
|
+
const ledgerEntry: CreateLedgerEntryParameters = {
|
|
236
|
+
queryParameters: {
|
|
237
|
+
tags: "tag1,tag2",
|
|
238
|
+
},
|
|
239
|
+
contentType: "application/json",
|
|
240
|
+
body: entry,
|
|
241
|
+
};
|
|
242
|
+
const result = await client.path("/app/transactions").post(ledgerEntry);
|
|
243
|
+
```
|
|
244
|
+
|
|
167
245
|
### Get a Ledger Entry By Transaction Id
|
|
168
246
|
|
|
169
247
|
```ts snippet:ReadmeSampleGetLedgerEntry
|
|
@@ -186,6 +264,56 @@ const transactionId = "<TRANSACTION_ID>";
|
|
|
186
264
|
const status = await client.path("/app/transactions/{transactionId}/status", transactionId).get();
|
|
187
265
|
```
|
|
188
266
|
|
|
267
|
+
### Get a Ledger Entry By Transaction Id With CollectionId
|
|
268
|
+
|
|
269
|
+
```ts snippet:ReadmeSampleGetLedgerEntryWithCollectionIdSample
|
|
270
|
+
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
|
|
271
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
272
|
+
|
|
273
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
274
|
+
"test-ledger-name",
|
|
275
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
276
|
+
);
|
|
277
|
+
const credential = new DefaultAzureCredential();
|
|
278
|
+
const client = ConfidentialLedger(
|
|
279
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
280
|
+
ledgerIdentityCertificate,
|
|
281
|
+
credential,
|
|
282
|
+
);
|
|
283
|
+
const transactionId = "<TRANSACTION_ID>";
|
|
284
|
+
const getLedgerEntryParams = {
|
|
285
|
+
queryParameters: { collectionId: "my-collection" },
|
|
286
|
+
};
|
|
287
|
+
const result = await client
|
|
288
|
+
.path("/app/transactions/{transactionId}", transactionId)
|
|
289
|
+
.get(getLedgerEntryParams);
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Get a Ledger Entry By Transaction Id With CollectionId and Tag
|
|
293
|
+
|
|
294
|
+
```ts snippet:ReadmeSampleGetLedgerEntryWithCollectionIdAndTagSample
|
|
295
|
+
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
|
|
296
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
297
|
+
|
|
298
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
299
|
+
"test-ledger-name",
|
|
300
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
301
|
+
);
|
|
302
|
+
const credential = new DefaultAzureCredential();
|
|
303
|
+
const client = ConfidentialLedger(
|
|
304
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
305
|
+
ledgerIdentityCertificate,
|
|
306
|
+
credential,
|
|
307
|
+
);
|
|
308
|
+
const transactionId = "<TRANSACTION_ID>";
|
|
309
|
+
const getLedgerEntryParams = {
|
|
310
|
+
queryParameters: { collectionId: "my-collection", tag: "tag1" },
|
|
311
|
+
};
|
|
312
|
+
const result = await client
|
|
313
|
+
.path("/app/transactions/{transactionId}", transactionId)
|
|
314
|
+
.get(getLedgerEntryParams);
|
|
315
|
+
```
|
|
316
|
+
|
|
189
317
|
### Get All Ledger Entries
|
|
190
318
|
|
|
191
319
|
```ts snippet:ReadmeSampleGetAllLedgerEntries
|
|
@@ -207,6 +335,50 @@ const client = ConfidentialLedger(
|
|
|
207
335
|
const ledgerEntries = await client.path("/app/transactions");
|
|
208
336
|
```
|
|
209
337
|
|
|
338
|
+
### Get All Ledger Entries With CollectionId
|
|
339
|
+
|
|
340
|
+
```ts snippet:ReadmeSampleGetAllLedgerEntriesWithCollectionIdSample
|
|
341
|
+
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
|
|
342
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
343
|
+
|
|
344
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
345
|
+
"test-ledger-name",
|
|
346
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
347
|
+
);
|
|
348
|
+
const credential = new DefaultAzureCredential();
|
|
349
|
+
const client = ConfidentialLedger(
|
|
350
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
351
|
+
ledgerIdentityCertificate,
|
|
352
|
+
credential,
|
|
353
|
+
);
|
|
354
|
+
const getLedgerEntriesParams = {
|
|
355
|
+
queryParameters: { collectionId: "my-collection" },
|
|
356
|
+
};
|
|
357
|
+
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Get All Ledger Entries With CollectionId and Tag
|
|
361
|
+
|
|
362
|
+
```ts snippet:ReadmeSampleGetAllLedgerEntriesWithCollectionIdAndTagSample
|
|
363
|
+
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
|
|
364
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
365
|
+
|
|
366
|
+
const { ledgerIdentityCertificate } = await getLedgerIdentity(
|
|
367
|
+
"test-ledger-name",
|
|
368
|
+
"https://identity.confidential-ledger.core.azure.com",
|
|
369
|
+
);
|
|
370
|
+
const credential = new DefaultAzureCredential();
|
|
371
|
+
const client = ConfidentialLedger(
|
|
372
|
+
"https://test-ledger-name.confidential-ledger.azure.com",
|
|
373
|
+
ledgerIdentityCertificate,
|
|
374
|
+
credential,
|
|
375
|
+
);
|
|
376
|
+
const getLedgerEntriesParams = {
|
|
377
|
+
queryParameters: { collectionId: "my-collection", tag: "tag1" },
|
|
378
|
+
};
|
|
379
|
+
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
|
|
380
|
+
```
|
|
381
|
+
|
|
210
382
|
### Get All Collections
|
|
211
383
|
|
|
212
384
|
```ts snippet:ReadmeSampleGetAllCollections
|
|
@@ -325,4 +497,4 @@ If you'd like to contribute to this library, please read the [contributing guide
|
|
|
325
497
|
[azure_sub]: https://azure.microsoft.com/free/
|
|
326
498
|
[azure_identity_credentials]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials
|
|
327
499
|
[default_azure_credential]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential
|
|
328
|
-
[azure_resource_manager]: https://learn.microsoft.com/azure/azure-resource-manager/management/overview
|
|
500
|
+
[azure_resource_manager]: https://learn.microsoft.com/azure/azure-resource-manager/management/overview
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidentialLedger.d.ts","sourceRoot":"","sources":["../../src/confidentialLedger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"confidentialLedger.d.ts","sourceRoot":"","sources":["../../src/confidentialLedger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAQvE,6CAA6C;AAC7C,MAAM,WAAW,+BAAgC,SAAQ,aAAa;IACpE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,eAAe,EAC5B,EAAE,UAAiC,EAAE,GAAG,OAAO,EAAE,GAAE,+BAAoC,GACtF,wBAAwB,CA8C1B"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.default = createClient;
|
|
6
|
-
const tslib_1 = require("tslib");
|
|
7
6
|
const core_client_1 = require("@azure-rest/core-client");
|
|
8
7
|
const logger_js_1 = require("./logger.js");
|
|
9
8
|
/**
|
|
@@ -12,22 +11,31 @@ const logger_js_1 = require("./logger.js");
|
|
|
12
11
|
* @param credentials - uniquely identify client credential
|
|
13
12
|
* @param options - the parameter for all optional parameters
|
|
14
13
|
*/
|
|
15
|
-
function createClient(ledgerEndpoint, credentials,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const endpointUrl = (_c = (_b = options.endpoint) !== null && _b !== void 0 ? _b : options.baseUrl) !== null && _c !== void 0 ? _c : `${ledgerEndpoint}`;
|
|
19
|
-
const userAgentInfo = `azsdk-js-confidential-ledger-rest/1.1.2-beta.3`;
|
|
14
|
+
function createClient(ledgerEndpoint, credentials, { apiVersion = "2024-12-09-preview", ...options } = {}) {
|
|
15
|
+
const endpointUrl = options.endpoint ?? options.baseUrl ?? `${ledgerEndpoint}`;
|
|
16
|
+
const userAgentInfo = `azsdk-js-confidential-ledger-rest/1.1.2-beta.4`;
|
|
20
17
|
const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
|
|
21
18
|
? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`
|
|
22
19
|
: `${userAgentInfo}`;
|
|
23
|
-
options =
|
|
20
|
+
options = {
|
|
21
|
+
...options,
|
|
22
|
+
userAgentOptions: {
|
|
24
23
|
userAgentPrefix,
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
},
|
|
25
|
+
loggingOptions: {
|
|
26
|
+
logger: options.loggingOptions?.logger ?? logger_js_1.logger.info,
|
|
27
|
+
},
|
|
28
|
+
credentials: {
|
|
29
|
+
scopes: options.credentials?.scopes ?? ["https://confidential-ledger.azure.com/.default"],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
30
32
|
const client = (0, core_client_1.getClient)(endpointUrl, credentials, options);
|
|
33
|
+
// Replace the default redirect policy with one that preserves all headers.
|
|
34
|
+
// The default redirectPolicy strips the Authorization header on redirect,
|
|
35
|
+
// which causes 401 errors when Confidential Ledger redirects write operations
|
|
36
|
+
// from a secondary node to the primary node.
|
|
37
|
+
client.pipeline.removePolicy({ name: "redirectPolicy" });
|
|
38
|
+
client.pipeline.addPolicy(confidentialLedgerRedirectPolicy(), { afterPhase: "Retry" });
|
|
31
39
|
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });
|
|
32
40
|
client.pipeline.addPolicy({
|
|
33
41
|
name: "ClientApiVersionPolicy",
|
|
@@ -43,4 +51,58 @@ function createClient(ledgerEndpoint, credentials, _a = {}) {
|
|
|
43
51
|
});
|
|
44
52
|
return client;
|
|
45
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Methods that are allowed to follow redirects 301 and 302.
|
|
56
|
+
*/
|
|
57
|
+
const allowedRedirect = ["GET", "HEAD"];
|
|
58
|
+
/**
|
|
59
|
+
* A custom redirect policy for Confidential Ledger that preserves all headers,
|
|
60
|
+
* including the Authorization header, when following redirects.
|
|
61
|
+
*
|
|
62
|
+
* The default core redirect policy strips the Authorization header on redirect
|
|
63
|
+
* as a general security measure. However, Confidential Ledger may redirect write
|
|
64
|
+
* operations (e.g., POST) from a secondary node to the primary node using a 307
|
|
65
|
+
* redirect. Because the redirect target is the same trusted Confidential Ledger
|
|
66
|
+
* service, the Authorization header must be forwarded to avoid 401 errors.
|
|
67
|
+
*
|
|
68
|
+
* @param maxRetries - The maximum number of redirects to follow. Defaults to 20.
|
|
69
|
+
* @returns A PipelinePolicy that handles redirects while preserving all headers.
|
|
70
|
+
*/
|
|
71
|
+
function confidentialLedgerRedirectPolicy(maxRetries = 20) {
|
|
72
|
+
return {
|
|
73
|
+
name: "confidentialLedgerRedirectPolicy",
|
|
74
|
+
async sendRequest(request, next) {
|
|
75
|
+
const response = await next(request);
|
|
76
|
+
return handleRedirect(next, response, maxRetries);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function handleRedirect(next, response, maxRetries, currentRetries = 0) {
|
|
81
|
+
const { request, status, headers } = response;
|
|
82
|
+
const locationHeader = headers.get("location");
|
|
83
|
+
if (locationHeader &&
|
|
84
|
+
(status === 300 ||
|
|
85
|
+
(status === 301 && allowedRedirect.includes(request.method)) ||
|
|
86
|
+
(status === 302 && allowedRedirect.includes(request.method)) ||
|
|
87
|
+
(status === 303 && request.method === "POST") ||
|
|
88
|
+
status === 307) &&
|
|
89
|
+
currentRetries < maxRetries) {
|
|
90
|
+
const url = new URL(locationHeader, request.url);
|
|
91
|
+
request.url = url.toString();
|
|
92
|
+
// POST request with Status code 303 should be converted into a
|
|
93
|
+
// redirected GET request if the redirect url is present in the location header
|
|
94
|
+
if (status === 303) {
|
|
95
|
+
request.method = "GET";
|
|
96
|
+
request.headers.delete("Content-Length");
|
|
97
|
+
delete request.body;
|
|
98
|
+
}
|
|
99
|
+
// NOTE: Unlike the default redirectPolicy, we intentionally do NOT strip the
|
|
100
|
+
// Authorization header here. Confidential Ledger redirects are always within
|
|
101
|
+
// the same trusted service (e.g., secondary to primary node), so credentials
|
|
102
|
+
// must be forwarded for the redirected request to succeed.
|
|
103
|
+
const res = await next(request);
|
|
104
|
+
return handleRedirect(next, res, maxRetries, currentRetries + 1);
|
|
105
|
+
}
|
|
106
|
+
return response;
|
|
107
|
+
}
|
|
46
108
|
//# sourceMappingURL=confidentialLedger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidentialLedger.js","sourceRoot":"","sources":["../../src/confidentialLedger.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;
|
|
1
|
+
{"version":3,"file":"confidentialLedger.js","sourceRoot":"","sources":["../../src/confidentialLedger.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ClientOptions } from \"@azure-rest/core-client\";\nimport { getClient } from \"@azure-rest/core-client\";\nimport { logger } from \"./logger.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport type { ConfidentialLedgerClient } from \"./clientDefinitions.js\";\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\n\n/** The optional parameters for the client */\nexport interface ConfidentialLedgerClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `ConfidentialLedgerClient`\n * @param ledgerEndpoint - The Confidential Ledger URL, for example https://contoso.confidentialledger.azure.com\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n ledgerEndpoint: string,\n credentials: TokenCredential,\n { apiVersion = \"2024-12-09-preview\", ...options }: ConfidentialLedgerClientOptions = {},\n): ConfidentialLedgerClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `${ledgerEndpoint}`;\n const userAgentInfo = `azsdk-js-confidential-ledger-rest/1.1.2-beta.4`;\n const userAgentPrefix =\n options.userAgentOptions && options.userAgentOptions.userAgentPrefix\n ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`\n : `${userAgentInfo}`;\n options = {\n ...options,\n userAgentOptions: {\n userAgentPrefix,\n },\n loggingOptions: {\n logger: options.loggingOptions?.logger ?? logger.info,\n },\n credentials: {\n scopes: options.credentials?.scopes ?? [\"https://confidential-ledger.azure.com/.default\"],\n },\n };\n const client = getClient(endpointUrl, credentials, options) as ConfidentialLedgerClient;\n\n // Replace the default redirect policy with one that preserves all headers.\n // The default redirectPolicy strips the Authorization header on redirect,\n // which causes 401 errors when Confidential Ledger redirects write operations\n // from a secondary node to the primary node.\n client.pipeline.removePolicy({ name: \"redirectPolicy\" });\n client.pipeline.addPolicy(confidentialLedgerRedirectPolicy(), { afterPhase: \"Retry\" });\n\n client.pipeline.removePolicy({ name: \"ApiVersionPolicy\" });\n client.pipeline.addPolicy({\n name: \"ClientApiVersionPolicy\",\n sendRequest: (req, next) => {\n // Use the apiVersion defined in request url directly\n // Append one if there is no apiVersion and we have one at client options\n const url = new URL(req.url);\n if (!url.searchParams.get(\"api-version\") && apiVersion) {\n req.url = `${req.url}${\n Array.from(url.searchParams.keys()).length > 0 ? \"&\" : \"?\"\n }api-version=${apiVersion}`;\n }\n\n return next(req);\n },\n });\n\n return client;\n}\n\n/**\n * Methods that are allowed to follow redirects 301 and 302.\n */\nconst allowedRedirect = [\"GET\", \"HEAD\"];\n\n/**\n * A custom redirect policy for Confidential Ledger that preserves all headers,\n * including the Authorization header, when following redirects.\n *\n * The default core redirect policy strips the Authorization header on redirect\n * as a general security measure. However, Confidential Ledger may redirect write\n * operations (e.g., POST) from a secondary node to the primary node using a 307\n * redirect. Because the redirect target is the same trusted Confidential Ledger\n * service, the Authorization header must be forwarded to avoid 401 errors.\n *\n * @param maxRetries - The maximum number of redirects to follow. Defaults to 20.\n * @returns A PipelinePolicy that handles redirects while preserving all headers.\n */\nfunction confidentialLedgerRedirectPolicy(maxRetries: number = 20): PipelinePolicy {\n return {\n name: \"confidentialLedgerRedirectPolicy\",\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const response = await next(request);\n return handleRedirect(next, response, maxRetries);\n },\n };\n}\n\nasync function handleRedirect(\n next: SendRequest,\n response: PipelineResponse,\n maxRetries: number,\n currentRetries: number = 0,\n): Promise<PipelineResponse> {\n const { request, status, headers } = response;\n const locationHeader = headers.get(\"location\");\n if (\n locationHeader &&\n (status === 300 ||\n (status === 301 && allowedRedirect.includes(request.method)) ||\n (status === 302 && allowedRedirect.includes(request.method)) ||\n (status === 303 && request.method === \"POST\") ||\n status === 307) &&\n currentRetries < maxRetries\n ) {\n const url = new URL(locationHeader, request.url);\n request.url = url.toString();\n\n // POST request with Status code 303 should be converted into a\n // redirected GET request if the redirect url is present in the location header\n if (status === 303) {\n request.method = \"GET\";\n request.headers.delete(\"Content-Length\");\n delete request.body;\n }\n\n // NOTE: Unlike the default redirectPolicy, we intentionally do NOT strip the\n // Authorization header here. Confidential Ledger redirects are always within\n // the same trusted service (e.g., secondary to primary node), so credentials\n // must be forwarded for the redirected request to succeed.\n\n const res = await next(request);\n return handleRedirect(next, res, maxRetries, currentRetries + 1);\n }\n\n return response;\n}\n"]}
|
|
@@ -7,19 +7,21 @@ const tslib_1 = require("tslib");
|
|
|
7
7
|
const core_auth_1 = require("@azure/core-auth");
|
|
8
8
|
const confidentialLedger_js_1 = tslib_1.__importDefault(require("./confidentialLedger.js"));
|
|
9
9
|
function ConfidentialLedger(ledgerEndpoint, ledgerIdentityCertificate, credentialsOrOptions, opts) {
|
|
10
|
-
var _a;
|
|
11
10
|
let credentials;
|
|
12
11
|
let options;
|
|
13
12
|
if ((0, core_auth_1.isTokenCredential)(credentialsOrOptions)) {
|
|
14
13
|
credentials = credentialsOrOptions;
|
|
15
|
-
options = opts
|
|
14
|
+
options = opts ?? {};
|
|
16
15
|
}
|
|
17
16
|
else {
|
|
18
|
-
options = credentialsOrOptions
|
|
17
|
+
options = credentialsOrOptions ?? {};
|
|
19
18
|
}
|
|
20
|
-
const tlsOptions =
|
|
19
|
+
const tlsOptions = options?.tlsOptions ?? {};
|
|
21
20
|
tlsOptions.ca = ledgerIdentityCertificate;
|
|
22
|
-
const confidentialLedger = (0, confidentialLedger_js_1.default)(ledgerEndpoint, credentials,
|
|
21
|
+
const confidentialLedger = (0, confidentialLedger_js_1.default)(ledgerEndpoint, credentials, {
|
|
22
|
+
...options,
|
|
23
|
+
tlsOptions,
|
|
24
|
+
});
|
|
23
25
|
return confidentialLedger;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=confidentialLedgerCustomized.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidentialLedgerCustomized.js","sourceRoot":"","sources":["../../src/confidentialLedgerCustomized.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAoBlC,qCAuBC;;AAxCD,gDAAqD;AAIrD,4FAAkE;AAalE,SAAwB,kBAAkB,CACxC,cAAsB,EACtB,yBAAiC,EACjC,oBAAsD,EACtD,IAAoB
|
|
1
|
+
{"version":3,"file":"confidentialLedgerCustomized.js","sourceRoot":"","sources":["../../src/confidentialLedgerCustomized.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAoBlC,qCAuBC;;AAxCD,gDAAqD;AAIrD,4FAAkE;AAalE,SAAwB,kBAAkB,CACxC,cAAsB,EACtB,yBAAiC,EACjC,oBAAsD,EACtD,IAAoB;IAEpB,IAAI,WAAwC,CAAC;IAC7C,IAAI,OAAsB,CAAC;IAE3B,IAAI,IAAA,6BAAiB,EAAC,oBAAoB,CAAC,EAAE,CAAC;QAC5C,WAAW,GAAG,oBAAoB,CAAC;QACnC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;IAC7C,UAAU,CAAC,EAAE,GAAG,yBAAyB,CAAC;IAC1C,MAAM,kBAAkB,GAAG,IAAA,+BAA2B,EAAC,cAAc,EAAE,WAAY,EAAE;QACnF,GAAG,OAAO;QACV,UAAU;KACX,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC;AAC5B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport { isTokenCredential } from \"@azure/core-auth\";\n\nimport type { ClientOptions } from \"@azure-rest/core-client\";\nimport type { ConfidentialLedgerClient } from \"./clientDefinitions.js\";\nimport GeneratedConfidentialLedger from \"./confidentialLedger.js\";\n\nexport default function ConfidentialLedger(\n ledgerEndpoint: string,\n ledgerIdentityCertificate: string,\n options?: ClientOptions,\n): ConfidentialLedgerClient;\nexport default function ConfidentialLedger(\n ledgerEndpoint: string,\n ledgerIdentityCertificate: string,\n credentials: TokenCredential,\n options?: ClientOptions,\n): ConfidentialLedgerClient;\nexport default function ConfidentialLedger(\n ledgerEndpoint: string,\n ledgerIdentityCertificate: string,\n credentialsOrOptions?: TokenCredential | ClientOptions,\n opts?: ClientOptions,\n): ConfidentialLedgerClient {\n let credentials: TokenCredential | undefined;\n let options: ClientOptions;\n\n if (isTokenCredential(credentialsOrOptions)) {\n credentials = credentialsOrOptions;\n options = opts ?? {};\n } else {\n options = credentialsOrOptions ?? {};\n }\n\n const tlsOptions = options?.tlsOptions ?? {};\n tlsOptions.ca = ledgerIdentityCertificate;\n const confidentialLedger = GeneratedConfidentialLedger(ledgerEndpoint, credentials!, {\n ...options,\n tlsOptions,\n });\n return confidentialLedger;\n}\n"]}
|
|
@@ -39,7 +39,7 @@ const responseMap = {
|
|
|
39
39
|
};
|
|
40
40
|
function isUnexpected(response) {
|
|
41
41
|
const lroOriginal = response.headers["x-ms-original-url"];
|
|
42
|
-
const url = new URL(lroOriginal
|
|
42
|
+
const url = new URL(lroOriginal ?? response.request.url);
|
|
43
43
|
const method = response.request.method;
|
|
44
44
|
let pathDetails = responseMap[`${method} ${url.pathname}`];
|
|
45
45
|
if (!pathDetails) {
|
|
@@ -48,7 +48,6 @@ function isUnexpected(response) {
|
|
|
48
48
|
return !pathDetails.includes(response.status);
|
|
49
49
|
}
|
|
50
50
|
function getParametrizedPathSuccess(method, path) {
|
|
51
|
-
var _a, _b, _c, _d;
|
|
52
51
|
const pathParts = path.split("/");
|
|
53
52
|
// Traverse list to match the longest candidate
|
|
54
53
|
// matchedLen: the length of candidate path
|
|
@@ -67,13 +66,13 @@ function getParametrizedPathSuccess(method, path) {
|
|
|
67
66
|
// track if we have found a match to return the values found.
|
|
68
67
|
let found = true;
|
|
69
68
|
for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {
|
|
70
|
-
if (
|
|
71
|
-
const start = candidateParts[i].indexOf("}") + 1, end =
|
|
69
|
+
if (candidateParts[i]?.startsWith("{") && candidateParts[i]?.indexOf("}") !== -1) {
|
|
70
|
+
const start = candidateParts[i].indexOf("}") + 1, end = candidateParts[i]?.length;
|
|
72
71
|
// If the current part of the candidate is a "template" part
|
|
73
72
|
// Try to use the suffix of pattern to match the path
|
|
74
73
|
// {guid} ==> $
|
|
75
74
|
// {guid}:export ==> :export$
|
|
76
|
-
const isMatched = new RegExp(`${
|
|
75
|
+
const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test(pathParts[j] || "");
|
|
77
76
|
if (!isMatched) {
|
|
78
77
|
found = false;
|
|
79
78
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isUnexpected.js","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetConstitution200Response,\n GetConstitutionDefaultResponse,\n ListConsortiumMembers200Response,\n ListConsortiumMembersDefaultResponse,\n GetEnclaveQuotes200Response,\n GetEnclaveQuotesDefaultResponse,\n ListCollections200Response,\n ListCollectionsDefaultResponse,\n ListLedgerEntries200Response,\n ListLedgerEntriesDefaultResponse,\n CreateLedgerEntry200Response,\n CreateLedgerEntryDefaultResponse,\n GetLedgerEntry200Response,\n GetLedgerEntryDefaultResponse,\n GetReceipt200Response,\n GetReceiptDefaultResponse,\n GetTransactionStatus200Response,\n GetTransactionStatusDefaultResponse,\n GetCurrentLedgerEntry200Response,\n GetCurrentLedgerEntryDefaultResponse,\n ListUsers200Response,\n ListUsersDefaultResponse,\n ListLedgerUsers200Response,\n ListLedgerUsersDefaultResponse,\n DeleteUser204Response,\n DeleteUserDefaultResponse,\n GetUser200Response,\n GetUserDefaultResponse,\n CreateOrUpdateUser200Response,\n CreateOrUpdateUserDefaultResponse,\n DeleteLedgerUser204Response,\n DeleteLedgerUserDefaultResponse,\n GetLedgerUser200Response,\n GetLedgerUserDefaultResponse,\n CreateOrUpdateLedgerUser200Response,\n CreateOrUpdateLedgerUserDefaultResponse,\n GetUserDefinedEndpoint200Response,\n GetUserDefinedEndpointDefaultResponse,\n CreateUserDefinedEndpoint201Response,\n CreateUserDefinedEndpointDefaultResponse,\n GetRuntimeOptions200Response,\n GetRuntimeOptionsDefaultResponse,\n UpdateRuntimeOptions200Response,\n UpdateRuntimeOptionsDefaultResponse,\n GetUserDefinedEndpointsModule200Response,\n GetUserDefinedEndpointsModuleDefaultResponse,\n ListUserDefinedFunctions200Response,\n ListUserDefinedFunctionsDefaultResponse,\n DeleteUserDefinedFunction204Response,\n DeleteUserDefinedFunctionDefaultResponse,\n GetUserDefinedFunction200Response,\n GetUserDefinedFunctionDefaultResponse,\n CreateUserDefinedFunction200Response,\n CreateUserDefinedFunction201Response,\n CreateUserDefinedFunctionDefaultResponse,\n ExecuteUserDefinedFunction200Response,\n ExecuteUserDefinedFunctionDefaultResponse,\n GetUserDefinedRole200Response,\n GetUserDefinedRoleDefaultResponse,\n CreateUserDefinedRole200Response,\n CreateUserDefinedRoleDefaultResponse,\n UpdateUserDefinedRole200Response,\n UpdateUserDefinedRoleDefaultResponse,\n DeleteUserDefinedRole200Response,\n DeleteUserDefinedRoleDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"GET /app/governance/constitution\": [\"200\"],\n \"GET /app/governance/members\": [\"200\"],\n \"GET /app/enclaveQuotes\": [\"200\"],\n \"GET /app/collections\": [\"200\"],\n \"GET /app/transactions\": [\"200\"],\n \"POST /app/transactions\": [\"200\"],\n \"GET /app/transactions/{transactionId}\": [\"200\"],\n \"GET /app/transactions/{transactionId}/receipt\": [\"200\"],\n \"GET /app/transactions/{transactionId}/status\": [\"200\"],\n \"GET /app/transactions/current\": [\"200\"],\n \"GET /app/users\": [\"200\"],\n \"GET /app/ledgerUsers\": [\"200\"],\n \"DELETE /app/users/{userId}\": [\"204\"],\n \"GET /app/users/{userId}\": [\"200\"],\n \"PATCH /app/users/{userId}\": [\"200\"],\n \"DELETE /app/ledgerUsers/{userId}\": [\"204\"],\n \"GET /app/ledgerUsers/{userId}\": [\"200\"],\n \"PATCH /app/ledgerUsers/{userId}\": [\"200\"],\n \"GET /app/userDefinedEndpoints\": [\"200\"],\n \"PUT /app/userDefinedEndpoints\": [\"201\"],\n \"GET /app/userDefinedEndpoints/runtimeOptions\": [\"200\"],\n \"PATCH /app/userDefinedEndpoints/runtimeOptions\": [\"200\"],\n \"GET /app/userDefinedEndpoints/modules\": [\"200\"],\n \"GET /app/userDefinedFunctions\": [\"200\"],\n \"DELETE /app/userDefinedFunctions/{functionId}\": [\"204\"],\n \"GET /app/userDefinedFunctions/{functionId}\": [\"200\"],\n \"PUT /app/userDefinedFunctions/{functionId}\": [\"200\", \"201\"],\n \"POST /app/userDefinedFunctions/{functionId}:execute\": [\"200\"],\n \"GET /app/roles\": [\"200\"],\n \"PUT /app/roles\": [\"200\"],\n \"PATCH /app/roles\": [\"200\"],\n \"DELETE /app/roles\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetConstitution200Response | GetConstitutionDefaultResponse,\n): response is GetConstitutionDefaultResponse;\nexport function isUnexpected(\n response: ListConsortiumMembers200Response | ListConsortiumMembersDefaultResponse,\n): response is ListConsortiumMembersDefaultResponse;\nexport function isUnexpected(\n response: GetEnclaveQuotes200Response | GetEnclaveQuotesDefaultResponse,\n): response is GetEnclaveQuotesDefaultResponse;\nexport function isUnexpected(\n response: ListCollections200Response | ListCollectionsDefaultResponse,\n): response is ListCollectionsDefaultResponse;\nexport function isUnexpected(\n response: ListLedgerEntries200Response | ListLedgerEntriesDefaultResponse,\n): response is ListLedgerEntriesDefaultResponse;\nexport function isUnexpected(\n response: CreateLedgerEntry200Response | CreateLedgerEntryDefaultResponse,\n): response is CreateLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: GetLedgerEntry200Response | GetLedgerEntryDefaultResponse,\n): response is GetLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: GetReceipt200Response | GetReceiptDefaultResponse,\n): response is GetReceiptDefaultResponse;\nexport function isUnexpected(\n response: GetTransactionStatus200Response | GetTransactionStatusDefaultResponse,\n): response is GetTransactionStatusDefaultResponse;\nexport function isUnexpected(\n response: GetCurrentLedgerEntry200Response | GetCurrentLedgerEntryDefaultResponse,\n): response is GetCurrentLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: ListUsers200Response | ListUsersDefaultResponse,\n): response is ListUsersDefaultResponse;\nexport function isUnexpected(\n response: ListLedgerUsers200Response | ListLedgerUsersDefaultResponse,\n): response is ListLedgerUsersDefaultResponse;\nexport function isUnexpected(\n response: DeleteUser204Response | DeleteUserDefaultResponse,\n): response is DeleteUserDefaultResponse;\nexport function isUnexpected(\n response: GetUser200Response | GetUserDefaultResponse,\n): response is GetUserDefaultResponse;\nexport function isUnexpected(\n response: CreateOrUpdateUser200Response | CreateOrUpdateUserDefaultResponse,\n): response is CreateOrUpdateUserDefaultResponse;\nexport function isUnexpected(\n response: DeleteLedgerUser204Response | DeleteLedgerUserDefaultResponse,\n): response is DeleteLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: GetLedgerUser200Response | GetLedgerUserDefaultResponse,\n): response is GetLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: CreateOrUpdateLedgerUser200Response | CreateOrUpdateLedgerUserDefaultResponse,\n): response is CreateOrUpdateLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedEndpoint200Response | GetUserDefinedEndpointDefaultResponse,\n): response is GetUserDefinedEndpointDefaultResponse;\nexport function isUnexpected(\n response: CreateUserDefinedEndpoint201Response | CreateUserDefinedEndpointDefaultResponse,\n): response is CreateUserDefinedEndpointDefaultResponse;\nexport function isUnexpected(\n response: GetRuntimeOptions200Response | GetRuntimeOptionsDefaultResponse,\n): response is GetRuntimeOptionsDefaultResponse;\nexport function isUnexpected(\n response: UpdateRuntimeOptions200Response | UpdateRuntimeOptionsDefaultResponse,\n): response is UpdateRuntimeOptionsDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedEndpointsModule200Response | GetUserDefinedEndpointsModuleDefaultResponse,\n): response is GetUserDefinedEndpointsModuleDefaultResponse;\nexport function isUnexpected(\n response: ListUserDefinedFunctions200Response | ListUserDefinedFunctionsDefaultResponse,\n): response is ListUserDefinedFunctionsDefaultResponse;\nexport function isUnexpected(\n response: DeleteUserDefinedFunction204Response | DeleteUserDefinedFunctionDefaultResponse,\n): response is DeleteUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedFunction200Response | GetUserDefinedFunctionDefaultResponse,\n): response is GetUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response:\n | CreateUserDefinedFunction200Response\n | CreateUserDefinedFunction201Response\n | CreateUserDefinedFunctionDefaultResponse,\n): response is CreateUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: ExecuteUserDefinedFunction200Response | ExecuteUserDefinedFunctionDefaultResponse,\n): response is ExecuteUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedRole200Response | GetUserDefinedRoleDefaultResponse,\n): response is GetUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: CreateUserDefinedRole200Response | CreateUserDefinedRoleDefaultResponse,\n): response is CreateUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: UpdateUserDefinedRole200Response | UpdateUserDefinedRoleDefaultResponse,\n): response is UpdateUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: DeleteUserDefinedRole200Response | DeleteUserDefinedRoleDefaultResponse,\n): response is DeleteUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response:\n | GetConstitution200Response\n | GetConstitutionDefaultResponse\n | ListConsortiumMembers200Response\n | ListConsortiumMembersDefaultResponse\n | GetEnclaveQuotes200Response\n | GetEnclaveQuotesDefaultResponse\n | ListCollections200Response\n | ListCollectionsDefaultResponse\n | ListLedgerEntries200Response\n | ListLedgerEntriesDefaultResponse\n | CreateLedgerEntry200Response\n | CreateLedgerEntryDefaultResponse\n | GetLedgerEntry200Response\n | GetLedgerEntryDefaultResponse\n | GetReceipt200Response\n | GetReceiptDefaultResponse\n | GetTransactionStatus200Response\n | GetTransactionStatusDefaultResponse\n | GetCurrentLedgerEntry200Response\n | GetCurrentLedgerEntryDefaultResponse\n | ListUsers200Response\n | ListUsersDefaultResponse\n | ListLedgerUsers200Response\n | ListLedgerUsersDefaultResponse\n | DeleteUser204Response\n | DeleteUserDefaultResponse\n | GetUser200Response\n | GetUserDefaultResponse\n | CreateOrUpdateUser200Response\n | CreateOrUpdateUserDefaultResponse\n | DeleteLedgerUser204Response\n | DeleteLedgerUserDefaultResponse\n | GetLedgerUser200Response\n | GetLedgerUserDefaultResponse\n | CreateOrUpdateLedgerUser200Response\n | CreateOrUpdateLedgerUserDefaultResponse\n | GetUserDefinedEndpoint200Response\n | GetUserDefinedEndpointDefaultResponse\n | CreateUserDefinedEndpoint201Response\n | CreateUserDefinedEndpointDefaultResponse\n | GetRuntimeOptions200Response\n | GetRuntimeOptionsDefaultResponse\n | UpdateRuntimeOptions200Response\n | UpdateRuntimeOptionsDefaultResponse\n | GetUserDefinedEndpointsModule200Response\n | GetUserDefinedEndpointsModuleDefaultResponse\n | ListUserDefinedFunctions200Response\n | ListUserDefinedFunctionsDefaultResponse\n | DeleteUserDefinedFunction204Response\n | DeleteUserDefinedFunctionDefaultResponse\n | GetUserDefinedFunction200Response\n | GetUserDefinedFunctionDefaultResponse\n | CreateUserDefinedFunction200Response\n | CreateUserDefinedFunction201Response\n | CreateUserDefinedFunctionDefaultResponse\n | ExecuteUserDefinedFunction200Response\n | ExecuteUserDefinedFunctionDefaultResponse\n | GetUserDefinedRole200Response\n | GetUserDefinedRoleDefaultResponse\n | CreateUserDefinedRole200Response\n | CreateUserDefinedRoleDefaultResponse\n | UpdateUserDefinedRole200Response\n | UpdateUserDefinedRoleDefaultResponse\n | DeleteUserDefinedRole200Response\n | DeleteUserDefinedRoleDefaultResponse,\n): response is\n | GetConstitutionDefaultResponse\n | ListConsortiumMembersDefaultResponse\n | GetEnclaveQuotesDefaultResponse\n | ListCollectionsDefaultResponse\n | ListLedgerEntriesDefaultResponse\n | CreateLedgerEntryDefaultResponse\n | GetLedgerEntryDefaultResponse\n | GetReceiptDefaultResponse\n | GetTransactionStatusDefaultResponse\n | GetCurrentLedgerEntryDefaultResponse\n | ListUsersDefaultResponse\n | ListLedgerUsersDefaultResponse\n | DeleteUserDefaultResponse\n | GetUserDefaultResponse\n | CreateOrUpdateUserDefaultResponse\n | DeleteLedgerUserDefaultResponse\n | GetLedgerUserDefaultResponse\n | CreateOrUpdateLedgerUserDefaultResponse\n | GetUserDefinedEndpointDefaultResponse\n | CreateUserDefinedEndpointDefaultResponse\n | GetRuntimeOptionsDefaultResponse\n | UpdateRuntimeOptionsDefaultResponse\n | GetUserDefinedEndpointsModuleDefaultResponse\n | ListUserDefinedFunctionsDefaultResponse\n | DeleteUserDefinedFunctionDefaultResponse\n | GetUserDefinedFunctionDefaultResponse\n | CreateUserDefinedFunctionDefaultResponse\n | ExecuteUserDefinedFunctionDefaultResponse\n | GetUserDefinedRoleDefaultResponse\n | CreateUserDefinedRoleDefaultResponse\n | UpdateUserDefinedRoleDefaultResponse\n | DeleteUserDefinedRoleDefaultResponse {\n const lroOriginal = response.headers[\"x-ms-original-url\"];\n const url = new URL(lroOriginal ?? response.request.url);\n const method = response.request.method;\n let pathDetails = responseMap[`${method} ${url.pathname}`];\n if (!pathDetails) {\n pathDetails = getParametrizedPathSuccess(method, url.pathname);\n }\n return !pathDetails.includes(response.status);\n}\n\nfunction getParametrizedPathSuccess(method: string, path: string): string[] {\n const pathParts = path.split(\"/\");\n\n // Traverse list to match the longest candidate\n // matchedLen: the length of candidate path\n // matchedValue: the matched status code array\n let matchedLen = -1,\n matchedValue: string[] = [];\n\n // Iterate the responseMap to find a match\n for (const [key, value] of Object.entries(responseMap)) {\n // Extracting the path from the map key which is in format\n // GET /path/foo\n if (!key.startsWith(method)) {\n continue;\n }\n const candidatePath = getPathFromMapKey(key);\n // Get each part of the url path\n const candidateParts = candidatePath.split(\"/\");\n\n // track if we have found a match to return the values found.\n let found = true;\n for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {\n if (candidateParts[i]?.startsWith(\"{\") && candidateParts[i]?.indexOf(\"}\") !== -1) {\n const start = candidateParts[i]!.indexOf(\"}\") + 1,\n end = candidateParts[i]?.length;\n // If the current part of the candidate is a \"template\" part\n // Try to use the suffix of pattern to match the path\n // {guid} ==> $\n // {guid}:export ==> :export$\n const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test(\n pathParts[j] || \"\",\n );\n\n if (!isMatched) {\n found = false;\n break;\n }\n continue;\n }\n\n // If the candidate part is not a template and\n // the parts don't match mark the candidate as not found\n // to move on with the next candidate path.\n if (candidateParts[i] !== pathParts[j]) {\n found = false;\n break;\n }\n }\n\n // We finished evaluating the current candidate parts\n // Update the matched value if and only if we found the longer pattern\n if (found && candidatePath.length > matchedLen) {\n matchedLen = candidatePath.length;\n matchedValue = value;\n }\n }\n\n return matchedValue;\n}\n\nfunction getPathFromMapKey(mapKey: string): string {\n const pathStart = mapKey.indexOf(\"/\");\n return mapKey.slice(pathStart);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"isUnexpected.js","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetConstitution200Response,\n GetConstitutionDefaultResponse,\n ListConsortiumMembers200Response,\n ListConsortiumMembersDefaultResponse,\n GetEnclaveQuotes200Response,\n GetEnclaveQuotesDefaultResponse,\n ListCollections200Response,\n ListCollectionsDefaultResponse,\n ListLedgerEntries200Response,\n ListLedgerEntriesDefaultResponse,\n CreateLedgerEntry200Response,\n CreateLedgerEntryDefaultResponse,\n GetLedgerEntry200Response,\n GetLedgerEntryDefaultResponse,\n GetReceipt200Response,\n GetReceiptDefaultResponse,\n GetTransactionStatus200Response,\n GetTransactionStatusDefaultResponse,\n GetCurrentLedgerEntry200Response,\n GetCurrentLedgerEntryDefaultResponse,\n ListUsers200Response,\n ListUsersDefaultResponse,\n ListLedgerUsers200Response,\n ListLedgerUsersDefaultResponse,\n DeleteUser204Response,\n DeleteUserDefaultResponse,\n GetUser200Response,\n GetUserDefaultResponse,\n CreateOrUpdateUser200Response,\n CreateOrUpdateUserDefaultResponse,\n DeleteLedgerUser204Response,\n DeleteLedgerUserDefaultResponse,\n GetLedgerUser200Response,\n GetLedgerUserDefaultResponse,\n CreateOrUpdateLedgerUser200Response,\n CreateOrUpdateLedgerUserDefaultResponse,\n GetUserDefinedEndpoint200Response,\n GetUserDefinedEndpointDefaultResponse,\n CreateUserDefinedEndpoint201Response,\n CreateUserDefinedEndpointDefaultResponse,\n GetRuntimeOptions200Response,\n GetRuntimeOptionsDefaultResponse,\n UpdateRuntimeOptions200Response,\n UpdateRuntimeOptionsDefaultResponse,\n GetUserDefinedEndpointsModule200Response,\n GetUserDefinedEndpointsModuleDefaultResponse,\n ListUserDefinedFunctions200Response,\n ListUserDefinedFunctionsDefaultResponse,\n DeleteUserDefinedFunction204Response,\n DeleteUserDefinedFunctionDefaultResponse,\n GetUserDefinedFunction200Response,\n GetUserDefinedFunctionDefaultResponse,\n CreateUserDefinedFunction200Response,\n CreateUserDefinedFunction201Response,\n CreateUserDefinedFunctionDefaultResponse,\n ExecuteUserDefinedFunction200Response,\n ExecuteUserDefinedFunctionDefaultResponse,\n GetUserDefinedRole200Response,\n GetUserDefinedRoleDefaultResponse,\n CreateUserDefinedRole200Response,\n CreateUserDefinedRoleDefaultResponse,\n UpdateUserDefinedRole200Response,\n UpdateUserDefinedRoleDefaultResponse,\n DeleteUserDefinedRole200Response,\n DeleteUserDefinedRoleDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"GET /app/governance/constitution\": [\"200\"],\n \"GET /app/governance/members\": [\"200\"],\n \"GET /app/enclaveQuotes\": [\"200\"],\n \"GET /app/collections\": [\"200\"],\n \"GET /app/transactions\": [\"200\"],\n \"POST /app/transactions\": [\"200\"],\n \"GET /app/transactions/{transactionId}\": [\"200\"],\n \"GET /app/transactions/{transactionId}/receipt\": [\"200\"],\n \"GET /app/transactions/{transactionId}/status\": [\"200\"],\n \"GET /app/transactions/current\": [\"200\"],\n \"GET /app/users\": [\"200\"],\n \"GET /app/ledgerUsers\": [\"200\"],\n \"DELETE /app/users/{userId}\": [\"204\"],\n \"GET /app/users/{userId}\": [\"200\"],\n \"PATCH /app/users/{userId}\": [\"200\"],\n \"DELETE /app/ledgerUsers/{userId}\": [\"204\"],\n \"GET /app/ledgerUsers/{userId}\": [\"200\"],\n \"PATCH /app/ledgerUsers/{userId}\": [\"200\"],\n \"GET /app/userDefinedEndpoints\": [\"200\"],\n \"PUT /app/userDefinedEndpoints\": [\"201\"],\n \"GET /app/userDefinedEndpoints/runtimeOptions\": [\"200\"],\n \"PATCH /app/userDefinedEndpoints/runtimeOptions\": [\"200\"],\n \"GET /app/userDefinedEndpoints/modules\": [\"200\"],\n \"GET /app/userDefinedFunctions\": [\"200\"],\n \"DELETE /app/userDefinedFunctions/{functionId}\": [\"204\"],\n \"GET /app/userDefinedFunctions/{functionId}\": [\"200\"],\n \"PUT /app/userDefinedFunctions/{functionId}\": [\"200\", \"201\"],\n \"POST /app/userDefinedFunctions/{functionId}:execute\": [\"200\"],\n \"GET /app/roles\": [\"200\"],\n \"PUT /app/roles\": [\"200\"],\n \"PATCH /app/roles\": [\"200\"],\n \"DELETE /app/roles\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetConstitution200Response | GetConstitutionDefaultResponse,\n): response is GetConstitutionDefaultResponse;\nexport function isUnexpected(\n response: ListConsortiumMembers200Response | ListConsortiumMembersDefaultResponse,\n): response is ListConsortiumMembersDefaultResponse;\nexport function isUnexpected(\n response: GetEnclaveQuotes200Response | GetEnclaveQuotesDefaultResponse,\n): response is GetEnclaveQuotesDefaultResponse;\nexport function isUnexpected(\n response: ListCollections200Response | ListCollectionsDefaultResponse,\n): response is ListCollectionsDefaultResponse;\nexport function isUnexpected(\n response: ListLedgerEntries200Response | ListLedgerEntriesDefaultResponse,\n): response is ListLedgerEntriesDefaultResponse;\nexport function isUnexpected(\n response: CreateLedgerEntry200Response | CreateLedgerEntryDefaultResponse,\n): response is CreateLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: GetLedgerEntry200Response | GetLedgerEntryDefaultResponse,\n): response is GetLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: GetReceipt200Response | GetReceiptDefaultResponse,\n): response is GetReceiptDefaultResponse;\nexport function isUnexpected(\n response: GetTransactionStatus200Response | GetTransactionStatusDefaultResponse,\n): response is GetTransactionStatusDefaultResponse;\nexport function isUnexpected(\n response: GetCurrentLedgerEntry200Response | GetCurrentLedgerEntryDefaultResponse,\n): response is GetCurrentLedgerEntryDefaultResponse;\nexport function isUnexpected(\n response: ListUsers200Response | ListUsersDefaultResponse,\n): response is ListUsersDefaultResponse;\nexport function isUnexpected(\n response: ListLedgerUsers200Response | ListLedgerUsersDefaultResponse,\n): response is ListLedgerUsersDefaultResponse;\nexport function isUnexpected(\n response: DeleteUser204Response | DeleteUserDefaultResponse,\n): response is DeleteUserDefaultResponse;\nexport function isUnexpected(\n response: GetUser200Response | GetUserDefaultResponse,\n): response is GetUserDefaultResponse;\nexport function isUnexpected(\n response: CreateOrUpdateUser200Response | CreateOrUpdateUserDefaultResponse,\n): response is CreateOrUpdateUserDefaultResponse;\nexport function isUnexpected(\n response: DeleteLedgerUser204Response | DeleteLedgerUserDefaultResponse,\n): response is DeleteLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: GetLedgerUser200Response | GetLedgerUserDefaultResponse,\n): response is GetLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: CreateOrUpdateLedgerUser200Response | CreateOrUpdateLedgerUserDefaultResponse,\n): response is CreateOrUpdateLedgerUserDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedEndpoint200Response | GetUserDefinedEndpointDefaultResponse,\n): response is GetUserDefinedEndpointDefaultResponse;\nexport function isUnexpected(\n response: CreateUserDefinedEndpoint201Response | CreateUserDefinedEndpointDefaultResponse,\n): response is CreateUserDefinedEndpointDefaultResponse;\nexport function isUnexpected(\n response: GetRuntimeOptions200Response | GetRuntimeOptionsDefaultResponse,\n): response is GetRuntimeOptionsDefaultResponse;\nexport function isUnexpected(\n response: UpdateRuntimeOptions200Response | UpdateRuntimeOptionsDefaultResponse,\n): response is UpdateRuntimeOptionsDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedEndpointsModule200Response | GetUserDefinedEndpointsModuleDefaultResponse,\n): response is GetUserDefinedEndpointsModuleDefaultResponse;\nexport function isUnexpected(\n response: ListUserDefinedFunctions200Response | ListUserDefinedFunctionsDefaultResponse,\n): response is ListUserDefinedFunctionsDefaultResponse;\nexport function isUnexpected(\n response: DeleteUserDefinedFunction204Response | DeleteUserDefinedFunctionDefaultResponse,\n): response is DeleteUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedFunction200Response | GetUserDefinedFunctionDefaultResponse,\n): response is GetUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response:\n | CreateUserDefinedFunction200Response\n | CreateUserDefinedFunction201Response\n | CreateUserDefinedFunctionDefaultResponse,\n): response is CreateUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: ExecuteUserDefinedFunction200Response | ExecuteUserDefinedFunctionDefaultResponse,\n): response is ExecuteUserDefinedFunctionDefaultResponse;\nexport function isUnexpected(\n response: GetUserDefinedRole200Response | GetUserDefinedRoleDefaultResponse,\n): response is GetUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: CreateUserDefinedRole200Response | CreateUserDefinedRoleDefaultResponse,\n): response is CreateUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: UpdateUserDefinedRole200Response | UpdateUserDefinedRoleDefaultResponse,\n): response is UpdateUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response: DeleteUserDefinedRole200Response | DeleteUserDefinedRoleDefaultResponse,\n): response is DeleteUserDefinedRoleDefaultResponse;\nexport function isUnexpected(\n response:\n | GetConstitution200Response\n | GetConstitutionDefaultResponse\n | ListConsortiumMembers200Response\n | ListConsortiumMembersDefaultResponse\n | GetEnclaveQuotes200Response\n | GetEnclaveQuotesDefaultResponse\n | ListCollections200Response\n | ListCollectionsDefaultResponse\n | ListLedgerEntries200Response\n | ListLedgerEntriesDefaultResponse\n | CreateLedgerEntry200Response\n | CreateLedgerEntryDefaultResponse\n | GetLedgerEntry200Response\n | GetLedgerEntryDefaultResponse\n | GetReceipt200Response\n | GetReceiptDefaultResponse\n | GetTransactionStatus200Response\n | GetTransactionStatusDefaultResponse\n | GetCurrentLedgerEntry200Response\n | GetCurrentLedgerEntryDefaultResponse\n | ListUsers200Response\n | ListUsersDefaultResponse\n | ListLedgerUsers200Response\n | ListLedgerUsersDefaultResponse\n | DeleteUser204Response\n | DeleteUserDefaultResponse\n | GetUser200Response\n | GetUserDefaultResponse\n | CreateOrUpdateUser200Response\n | CreateOrUpdateUserDefaultResponse\n | DeleteLedgerUser204Response\n | DeleteLedgerUserDefaultResponse\n | GetLedgerUser200Response\n | GetLedgerUserDefaultResponse\n | CreateOrUpdateLedgerUser200Response\n | CreateOrUpdateLedgerUserDefaultResponse\n | GetUserDefinedEndpoint200Response\n | GetUserDefinedEndpointDefaultResponse\n | CreateUserDefinedEndpoint201Response\n | CreateUserDefinedEndpointDefaultResponse\n | GetRuntimeOptions200Response\n | GetRuntimeOptionsDefaultResponse\n | UpdateRuntimeOptions200Response\n | UpdateRuntimeOptionsDefaultResponse\n | GetUserDefinedEndpointsModule200Response\n | GetUserDefinedEndpointsModuleDefaultResponse\n | ListUserDefinedFunctions200Response\n | ListUserDefinedFunctionsDefaultResponse\n | DeleteUserDefinedFunction204Response\n | DeleteUserDefinedFunctionDefaultResponse\n | GetUserDefinedFunction200Response\n | GetUserDefinedFunctionDefaultResponse\n | CreateUserDefinedFunction200Response\n | CreateUserDefinedFunction201Response\n | CreateUserDefinedFunctionDefaultResponse\n | ExecuteUserDefinedFunction200Response\n | ExecuteUserDefinedFunctionDefaultResponse\n | GetUserDefinedRole200Response\n | GetUserDefinedRoleDefaultResponse\n | CreateUserDefinedRole200Response\n | CreateUserDefinedRoleDefaultResponse\n | UpdateUserDefinedRole200Response\n | UpdateUserDefinedRoleDefaultResponse\n | DeleteUserDefinedRole200Response\n | DeleteUserDefinedRoleDefaultResponse,\n): response is\n | GetConstitutionDefaultResponse\n | ListConsortiumMembersDefaultResponse\n | GetEnclaveQuotesDefaultResponse\n | ListCollectionsDefaultResponse\n | ListLedgerEntriesDefaultResponse\n | CreateLedgerEntryDefaultResponse\n | GetLedgerEntryDefaultResponse\n | GetReceiptDefaultResponse\n | GetTransactionStatusDefaultResponse\n | GetCurrentLedgerEntryDefaultResponse\n | ListUsersDefaultResponse\n | ListLedgerUsersDefaultResponse\n | DeleteUserDefaultResponse\n | GetUserDefaultResponse\n | CreateOrUpdateUserDefaultResponse\n | DeleteLedgerUserDefaultResponse\n | GetLedgerUserDefaultResponse\n | CreateOrUpdateLedgerUserDefaultResponse\n | GetUserDefinedEndpointDefaultResponse\n | CreateUserDefinedEndpointDefaultResponse\n | GetRuntimeOptionsDefaultResponse\n | UpdateRuntimeOptionsDefaultResponse\n | GetUserDefinedEndpointsModuleDefaultResponse\n | ListUserDefinedFunctionsDefaultResponse\n | DeleteUserDefinedFunctionDefaultResponse\n | GetUserDefinedFunctionDefaultResponse\n | CreateUserDefinedFunctionDefaultResponse\n | ExecuteUserDefinedFunctionDefaultResponse\n | GetUserDefinedRoleDefaultResponse\n | CreateUserDefinedRoleDefaultResponse\n | UpdateUserDefinedRoleDefaultResponse\n | DeleteUserDefinedRoleDefaultResponse {\n const lroOriginal = response.headers[\"x-ms-original-url\"];\n const url = new URL(lroOriginal ?? response.request.url);\n const method = response.request.method;\n let pathDetails = responseMap[`${method} ${url.pathname}`];\n if (!pathDetails) {\n pathDetails = getParametrizedPathSuccess(method, url.pathname);\n }\n return !pathDetails.includes(response.status);\n}\n\nfunction getParametrizedPathSuccess(method: string, path: string): string[] {\n const pathParts = path.split(\"/\");\n\n // Traverse list to match the longest candidate\n // matchedLen: the length of candidate path\n // matchedValue: the matched status code array\n let matchedLen = -1,\n matchedValue: string[] = [];\n\n // Iterate the responseMap to find a match\n for (const [key, value] of Object.entries(responseMap)) {\n // Extracting the path from the map key which is in format\n // GET /path/foo\n if (!key.startsWith(method)) {\n continue;\n }\n const candidatePath = getPathFromMapKey(key);\n // Get each part of the url path\n const candidateParts = candidatePath.split(\"/\");\n\n // track if we have found a match to return the values found.\n let found = true;\n for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {\n if (candidateParts[i]?.startsWith(\"{\") && candidateParts[i]?.indexOf(\"}\") !== -1) {\n const start = candidateParts[i]!.indexOf(\"}\") + 1,\n end = candidateParts[i]?.length;\n // If the current part of the candidate is a \"template\" part\n // Try to use the suffix of pattern to match the path\n // {guid} ==> $\n // {guid}:export ==> :export$\n const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test(\n pathParts[j] || \"\",\n );\n\n if (!isMatched) {\n found = false;\n break;\n }\n continue;\n }\n\n // If the candidate part is not a template and\n // the parts don't match mark the candidate as not found\n // to move on with the next candidate path.\n if (candidateParts[i] !== pathParts[j]) {\n found = false;\n break;\n }\n }\n\n // We finished evaluating the current candidate parts\n // Update the matched value if and only if we found the longer pattern\n if (found && candidatePath.length > matchedLen) {\n matchedLen = candidatePath.length;\n matchedValue = value;\n }\n }\n\n return matchedValue;\n}\n\nfunction getPathFromMapKey(mapKey: string): string {\n const pathStart = mapKey.indexOf(\"/\");\n return mapKey.slice(pathStart);\n}\n"]}
|