@azure-rest/health-deidentification 1.0.0-beta.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +153 -35
  3. package/dist/browser/clientDefinitions.d.ts +7 -7
  4. package/dist/browser/clientDefinitions.d.ts.map +1 -1
  5. package/dist/browser/clientDefinitions.js +1 -1
  6. package/dist/browser/clientDefinitions.js.map +1 -1
  7. package/dist/browser/deidentificationClient.d.ts +3 -3
  8. package/dist/browser/deidentificationClient.d.ts.map +1 -1
  9. package/dist/browser/deidentificationClient.js +3 -3
  10. package/dist/browser/deidentificationClient.js.map +1 -1
  11. package/dist/browser/index.js +1 -1
  12. package/dist/browser/index.js.map +1 -1
  13. package/dist/browser/isUnexpected.d.ts +3 -3
  14. package/dist/browser/isUnexpected.d.ts.map +1 -1
  15. package/dist/browser/isUnexpected.js +1 -1
  16. package/dist/browser/isUnexpected.js.map +1 -1
  17. package/dist/browser/logger.js +1 -1
  18. package/dist/browser/logger.js.map +1 -1
  19. package/dist/browser/models.d.ts +45 -28
  20. package/dist/browser/models.d.ts.map +1 -1
  21. package/dist/browser/models.js +1 -1
  22. package/dist/browser/models.js.map +1 -1
  23. package/dist/browser/outputModels.d.ts +56 -40
  24. package/dist/browser/outputModels.d.ts.map +1 -1
  25. package/dist/browser/outputModels.js +1 -1
  26. package/dist/browser/outputModels.js.map +1 -1
  27. package/dist/browser/paginateHelper.d.ts +28 -3
  28. package/dist/browser/paginateHelper.d.ts.map +1 -1
  29. package/dist/browser/paginateHelper.js +99 -2
  30. package/dist/browser/paginateHelper.js.map +1 -1
  31. package/dist/browser/parameters.d.ts +17 -10
  32. package/dist/browser/parameters.d.ts.map +1 -1
  33. package/dist/browser/parameters.js +1 -1
  34. package/dist/browser/parameters.js.map +1 -1
  35. package/dist/browser/pollingHelper.d.ts +5 -5
  36. package/dist/browser/pollingHelper.d.ts.map +1 -1
  37. package/dist/browser/pollingHelper.js +2 -2
  38. package/dist/browser/pollingHelper.js.map +1 -1
  39. package/dist/browser/responses.d.ts +24 -19
  40. package/dist/browser/responses.d.ts.map +1 -1
  41. package/dist/browser/responses.js +1 -1
  42. package/dist/browser/responses.js.map +1 -1
  43. package/dist/commonjs/clientDefinitions.d.ts +7 -7
  44. package/dist/commonjs/clientDefinitions.d.ts.map +1 -1
  45. package/dist/commonjs/clientDefinitions.js +1 -1
  46. package/dist/commonjs/clientDefinitions.js.map +1 -1
  47. package/dist/commonjs/deidentificationClient.d.ts +3 -3
  48. package/dist/commonjs/deidentificationClient.d.ts.map +1 -1
  49. package/dist/commonjs/deidentificationClient.js +3 -3
  50. package/dist/commonjs/deidentificationClient.js.map +1 -1
  51. package/dist/commonjs/index.js +1 -1
  52. package/dist/commonjs/index.js.map +1 -1
  53. package/dist/commonjs/isUnexpected.d.ts +3 -3
  54. package/dist/commonjs/isUnexpected.d.ts.map +1 -1
  55. package/dist/commonjs/isUnexpected.js +1 -1
  56. package/dist/commonjs/isUnexpected.js.map +1 -1
  57. package/dist/commonjs/logger.js +1 -1
  58. package/dist/commonjs/logger.js.map +1 -1
  59. package/dist/commonjs/models.d.ts +45 -28
  60. package/dist/commonjs/models.d.ts.map +1 -1
  61. package/dist/commonjs/models.js +1 -1
  62. package/dist/commonjs/models.js.map +1 -1
  63. package/dist/commonjs/outputModels.d.ts +56 -40
  64. package/dist/commonjs/outputModels.d.ts.map +1 -1
  65. package/dist/commonjs/outputModels.js +1 -1
  66. package/dist/commonjs/outputModels.js.map +1 -1
  67. package/dist/commonjs/paginateHelper.d.ts +28 -3
  68. package/dist/commonjs/paginateHelper.d.ts.map +1 -1
  69. package/dist/commonjs/paginateHelper.js +100 -3
  70. package/dist/commonjs/paginateHelper.js.map +1 -1
  71. package/dist/commonjs/parameters.d.ts +17 -10
  72. package/dist/commonjs/parameters.d.ts.map +1 -1
  73. package/dist/commonjs/parameters.js +1 -1
  74. package/dist/commonjs/parameters.js.map +1 -1
  75. package/dist/commonjs/pollingHelper.d.ts +5 -5
  76. package/dist/commonjs/pollingHelper.d.ts.map +1 -1
  77. package/dist/commonjs/pollingHelper.js +1 -1
  78. package/dist/commonjs/pollingHelper.js.map +1 -1
  79. package/dist/commonjs/responses.d.ts +24 -19
  80. package/dist/commonjs/responses.d.ts.map +1 -1
  81. package/dist/commonjs/responses.js +1 -1
  82. package/dist/commonjs/responses.js.map +1 -1
  83. package/dist/commonjs/tsdoc-metadata.json +1 -1
  84. package/dist/esm/clientDefinitions.d.ts +7 -7
  85. package/dist/esm/clientDefinitions.d.ts.map +1 -1
  86. package/dist/esm/clientDefinitions.js +1 -1
  87. package/dist/esm/clientDefinitions.js.map +1 -1
  88. package/dist/esm/deidentificationClient.d.ts +3 -3
  89. package/dist/esm/deidentificationClient.d.ts.map +1 -1
  90. package/dist/esm/deidentificationClient.js +3 -3
  91. package/dist/esm/deidentificationClient.js.map +1 -1
  92. package/dist/esm/index.js +1 -1
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/isUnexpected.d.ts +3 -3
  95. package/dist/esm/isUnexpected.d.ts.map +1 -1
  96. package/dist/esm/isUnexpected.js +1 -1
  97. package/dist/esm/isUnexpected.js.map +1 -1
  98. package/dist/esm/logger.js +1 -1
  99. package/dist/esm/logger.js.map +1 -1
  100. package/dist/esm/models.d.ts +45 -28
  101. package/dist/esm/models.d.ts.map +1 -1
  102. package/dist/esm/models.js +1 -1
  103. package/dist/esm/models.js.map +1 -1
  104. package/dist/esm/outputModels.d.ts +56 -40
  105. package/dist/esm/outputModels.d.ts.map +1 -1
  106. package/dist/esm/outputModels.js +1 -1
  107. package/dist/esm/outputModels.js.map +1 -1
  108. package/dist/esm/paginateHelper.d.ts +28 -3
  109. package/dist/esm/paginateHelper.d.ts.map +1 -1
  110. package/dist/esm/paginateHelper.js +99 -2
  111. package/dist/esm/paginateHelper.js.map +1 -1
  112. package/dist/esm/parameters.d.ts +17 -10
  113. package/dist/esm/parameters.d.ts.map +1 -1
  114. package/dist/esm/parameters.js +1 -1
  115. package/dist/esm/parameters.js.map +1 -1
  116. package/dist/esm/pollingHelper.d.ts +5 -5
  117. package/dist/esm/pollingHelper.d.ts.map +1 -1
  118. package/dist/esm/pollingHelper.js +2 -2
  119. package/dist/esm/pollingHelper.js.map +1 -1
  120. package/dist/esm/responses.d.ts +24 -19
  121. package/dist/esm/responses.d.ts.map +1 -1
  122. package/dist/esm/responses.js +1 -1
  123. package/dist/esm/responses.js.map +1 -1
  124. package/dist/react-native/clientDefinitions.d.ts +7 -7
  125. package/dist/react-native/clientDefinitions.d.ts.map +1 -1
  126. package/dist/react-native/clientDefinitions.js +1 -1
  127. package/dist/react-native/clientDefinitions.js.map +1 -1
  128. package/dist/react-native/deidentificationClient.d.ts +3 -3
  129. package/dist/react-native/deidentificationClient.d.ts.map +1 -1
  130. package/dist/react-native/deidentificationClient.js +3 -3
  131. package/dist/react-native/deidentificationClient.js.map +1 -1
  132. package/dist/react-native/index.js +1 -1
  133. package/dist/react-native/index.js.map +1 -1
  134. package/dist/react-native/isUnexpected.d.ts +3 -3
  135. package/dist/react-native/isUnexpected.d.ts.map +1 -1
  136. package/dist/react-native/isUnexpected.js +1 -1
  137. package/dist/react-native/isUnexpected.js.map +1 -1
  138. package/dist/react-native/logger.js +1 -1
  139. package/dist/react-native/logger.js.map +1 -1
  140. package/dist/react-native/models.d.ts +45 -28
  141. package/dist/react-native/models.d.ts.map +1 -1
  142. package/dist/react-native/models.js +1 -1
  143. package/dist/react-native/models.js.map +1 -1
  144. package/dist/react-native/outputModels.d.ts +56 -40
  145. package/dist/react-native/outputModels.d.ts.map +1 -1
  146. package/dist/react-native/outputModels.js +1 -1
  147. package/dist/react-native/outputModels.js.map +1 -1
  148. package/dist/react-native/paginateHelper.d.ts +28 -3
  149. package/dist/react-native/paginateHelper.d.ts.map +1 -1
  150. package/dist/react-native/paginateHelper.js +99 -2
  151. package/dist/react-native/paginateHelper.js.map +1 -1
  152. package/dist/react-native/parameters.d.ts +17 -10
  153. package/dist/react-native/parameters.d.ts.map +1 -1
  154. package/dist/react-native/parameters.js +1 -1
  155. package/dist/react-native/parameters.js.map +1 -1
  156. package/dist/react-native/pollingHelper.d.ts +5 -5
  157. package/dist/react-native/pollingHelper.d.ts.map +1 -1
  158. package/dist/react-native/pollingHelper.js +2 -2
  159. package/dist/react-native/pollingHelper.js.map +1 -1
  160. package/dist/react-native/responses.d.ts +24 -19
  161. package/dist/react-native/responses.d.ts.map +1 -1
  162. package/dist/react-native/responses.js +1 -1
  163. package/dist/react-native/responses.js.map +1 -1
  164. package/package.json +45 -51
  165. package/review/health-deidentification.api.md +0 -645
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
- The MIT License (MIT)
1
+ Copyright (c) Microsoft Corporation.
2
2
 
3
- Copyright (c) 2024 Microsoft
3
+ MIT License
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -12,10 +12,10 @@ furnished to do so, subject to the following conditions:
12
12
  The above copyright notice and this permission notice shall be included in all
13
13
  copies or substantial portions of the Software.
14
14
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
16
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
17
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,26 +1,45 @@
1
- # Azure Deidentification REST client library for JavaScript
1
+ # Azure Health Data Services de-identification service REST client library for JavaScript
2
2
 
3
- `@azure-rest/health-deidentification` is a managed service that enables users to tag, redact, or surrogate health data.
3
+ This package contains a client library for the de-identification service in Azure Health Data Services which
4
+ enables users to tag, redact, or surrogate health data containing Protected Health Information (PHI).
5
+
6
+ Use the client library for the de-identification service to:
7
+ - Discover PHI in unstructured text
8
+ - Replace PHI in unstructured text with placeholder values
9
+ - Replace PHI in unstructured text with realistic surrogate values
10
+ - Manage asynchronous jobs to de-identify documents in Azure Storage
11
+
12
+ **Please rely heavily on our [REST client docs](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/rest-clients.md) to use this library.**
13
+
14
+ Use the client library for the de-identification service to:
15
+ - Discover PHI in unstructured text
16
+ - Replace PHI in unstructured text with placeholder values
17
+ - Replace PHI in unstructured text with realistic surrogate values
18
+ - Manage asynchronous jobs to de-identify documents in Azure Storage
4
19
 
5
- <!-- **Please rely heavily on our [REST client docs](https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/rest-clients.md) to use this library** -->
6
- <!-- TODO Fix links once they are live use placeholden until then -->
7
20
  Key links:
8
21
 
22
+ - [Source code](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/healthdataaiservices/health-deidentification-rest)
9
23
  - [Package (NPM)](https://www.npmjs.com/package/@azure-rest/health-deidentification)
24
+ - [API reference documentation](https://learn.microsoft.com/javascript/api/@azure-rest/health-deidentification)
25
+ - [Product documentation][product_documentation]
10
26
 
11
27
  ## Getting started
12
28
 
13
29
  ### Currently supported environments
14
30
 
15
- - LTS versions of Node.js
31
+ - [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule)
32
+ - Latest versions of Safari, Chrome, Edge and Firefox.
16
33
 
17
34
  ### Prerequisites
18
35
 
19
- - You must have an [Azure subscription](https://azure.microsoft.com/free/) to use this package.
36
+ - You need an [Azure subscription][azure_sub] to use this package.
37
+ - [Deploy the de-identification service][deid_quickstart].
38
+ - [Configure Azure role-based access control (RBAC)][deid_rbac] for the operations you will perform.
20
39
 
21
40
  ### Install the `@azure-rest/health-deidentification` package
22
41
 
23
- Install the Azure Deidentification REST client REST client library for JavaScript with `npm`:
42
+ Install the library with `npm`:
24
43
 
25
44
  ```bash
26
45
  npm install @azure-rest/health-deidentification
@@ -28,41 +47,62 @@ npm install @azure-rest/health-deidentification
28
47
 
29
48
  ### Create and authenticate a `DeidentificationClient`
30
49
 
31
- To use an [Azure Active Directory (AAD) token credential](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/identity/identity/samples/AzureIdentityExamples.md#authenticating-with-a-pre-fetched-access-token),
32
- provide an instance of the desired credential type obtained from the
33
- [@azure/identity](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) library.
50
+ You can authenticate with Microsoft Entra ID using the [Azure Identity library][azure_identity]. To use the [DefaultAzureCredential][defaultazurecredential] provider shown below, or other credential providers provided with the Azure SDK, please install the `@azure/identity` package:
34
51
 
35
- To authenticate with AAD, you must first `npm` install [`@azure/identity`](https://www.npmjs.com/package/@azure/identity)
52
+ ```bash
53
+ npm install @azure/identity
54
+ ```
36
55
 
37
56
  After setup, you can choose which type of [credential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#credentials) from `@azure/identity` to use.
38
- As an example, [DefaultAzureCredential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential)
39
- can be used to authenticate the client.
57
+ As an example, [DefaultAzureCredential](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential) can be used to authenticate the client.
40
58
 
41
59
  Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables:
42
- `AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`
60
+ `AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`.
43
61
 
44
- Pull `ServiceUrl` from your created Deidentification Service.
62
+ You will need a **service URL** to instantiate a client object. You can find the service URL for a particular resource in the [Azure portal][azure_portal], or using the [Azure CLI][azure_cli].
63
+ Here's an example of setting an environment variable in Bash using Azure CLI:
45
64
 
46
- ![Service Url Location](documentation/images/ServiceUrl_Location.png)
65
+ ```bash
66
+ # Get the service URL for the resource
67
+ export DEID_SERVICE_ENDPOINT=$(az deidservice show --name "<resource-name>" --resource-group "<resource-group-name>" --query "properties.serviceUrl")
68
+ ```
69
+
70
+ Create a client with the endpoint and credential:
71
+ ```ts snippet:CreateClient
72
+ import { DefaultAzureCredential } from "@azure/identity";
73
+ import DeidentificationClient from "@azure-rest/health-deidentification";
47
74
 
48
- Basic code snippet to create your Deidentification Client and Deidentify a string.
75
+ const credential = new DefaultAzureCredential();
76
+ const serviceEndpoint = process.env.DEID_SERVICE_ENDPOINT || "https://example.api.deid.azure.com";
77
+ const client = DeidentificationClient(serviceEndpoint, credential);
78
+ ```
49
79
 
50
- ```javascript
51
- import createClient, {
80
+ ## Key concepts
81
+
82
+ ### De-identification operations:
83
+ Given an input text, the de-identification service can perform three main operations:
84
+ - `Tag` returns the category and location within the text of detected PHI entities.
85
+ - `Redact` returns output text where detected PHI entities are replaced with placeholder text. For example `John` replaced with `[name]`.
86
+ - `Surrogate` returns output text where detected PHI entities are replaced with realistic replacement values. For example, `My name is John Smith` could become `My name is Tom Jones`.
87
+
88
+ ### Available endpoints
89
+ There are two ways to interact with the de-identification service. You can send text directly, or you can create jobs
90
+ to de-identify documents in Azure Storage.
91
+
92
+ You can de-identify text directly using the `DeidentificationClient`:
93
+ ```ts snippet:DeidentifyText
94
+ import { DefaultAzureCredential } from "@azure/identity";
95
+ import DeidentificationClient, {
52
96
  DeidentificationContent,
53
97
  isUnexpected,
54
98
  } from "@azure-rest/health-deidentification";
55
- import { DefaultAzureCredential } from "@azure/identity";
56
- import * as dotenv from "dotenv";
57
- dotenv.config();
58
99
 
59
100
  const credential = new DefaultAzureCredential();
60
- const serviceEndpoint =
61
- process.env["DEID_SERVICE_ENDPOINT"] || "https://example.api.cac001.deid.azure.com";
62
- const client = createClient(serviceEndpoint, credential);
101
+ const serviceEndpoint = process.env.DEID_SERVICE_ENDPOINT || "https://example.api.deid.azure.com";
102
+ const client = DeidentificationClient(serviceEndpoint, credential);
63
103
 
64
104
  const content: DeidentificationContent = {
65
- inputText: "Hello John!"
105
+ inputText: "Hello John!",
66
106
  };
67
107
 
68
108
  const response = await client.path("/deid").post({ body: content });
@@ -74,26 +114,104 @@ if (isUnexpected(response)) {
74
114
  console.log(response.body.outputText); // Hello, Tom!
75
115
  ```
76
116
 
77
- ## Key concept
117
+ To de-identify documents in Azure Storage, you'll need a storage account with a container to which the de-identification service has been granted an appropriate role. See [Tutorial: Configure Azure Storage to de-identify documents][deid_configure_storage] for prerequisites and configuration options. You can upload the files in the [test data folder][test_data] as blobs, like: `https://<storageaccount>.blob.core.windows.net/<container>/example_patient_1/doctor_dictation.txt`.
118
+
119
+ You can create jobs to de-identify documents in the source Azure Storage account and container with an optional input prefix. If there's no input prefix, all blobs in the container will be de-identified. Azure Storage blobs can use `/` in the blob name to emulate a folder or directory layout. For more on blob naming, see [Naming and Referencing Containers, Blobs, and Metadata][blob_names]. The files you've uploaded can be de-identified by providing `example_patient_1` as the input prefix:
120
+ ```
121
+ <container>/
122
+ ├── example_patient_1/
123
+ └──doctor_dictation.txt
124
+ └──row-2-data.txt
125
+ └──visit-summary.txt
126
+ ```
127
+
128
+ Your target Azure Storage account and container where documents will be written can be the same as the source, or a different account or container. In the examples below, the source and target account and container are the same. You can specify an output prefix to indicate where the job's output documents should be written (defaulting to `_output`). Each document processed by the job will have the same relative blob name with the input prefix replaced by the output prefix:
129
+ ```
130
+ <container>/
131
+ ├── example_patient_1/
132
+ └──doctor_dictation.txt
133
+ └──row-2-data.txt
134
+ └──visit-summary.txt
135
+ ├── _output/
136
+ └──doctor_dictation.txt
137
+ └──row-2-data.txt
138
+ └──visit-summary.txt
139
+ ```
78
140
 
79
- Operation Modes:
141
+ Set the following environment variables, updating the storage account and container with real values:
142
+ ```bash
143
+ export AZURE_STORAGE_ACCOUNT_LOCATION="https://<storageaccount>.blob.core.windows.net/<container>"
144
+ export INPUT_PREFIX="example_patient_1"
145
+ export OUTPUT_PREFIX="_output"
146
+ ```
80
147
 
81
- - Tag: Will return a structure of offset and length with the PHI category of the related text spans.
82
- - Redact: Will return output text with placeholder stubbed text. ex. `[name]`
83
- - Surrogate: Will return output text with synthetic replacements.
84
- - `My name is John Smith`
85
- - `My name is Tom Jones`
148
+ You can create and view job status using the client:
149
+ ```ts snippet:DeidentifyDocuments
150
+ import { DefaultAzureCredential } from "@azure/identity";
151
+ import DeidentificationClient, {
152
+ DeidentificationJob,
153
+ DeidentifyDocumentsDefaultResponse,
154
+ isUnexpected,
155
+ getLongRunningPoller,
156
+ } from "@azure-rest/health-deidentification";
157
+
158
+ const credential = new DefaultAzureCredential();
159
+ const serviceEndpoint =
160
+ process.env["DEID_SERVICE_ENDPOINT"] || "https://example.api.deid.azure.com";
161
+ const storageLocation = `https://${process.env["STORAGE_ACCOUNT_NAME"]}.blob.core.windows.net/${process.env["STORAGE_CONTAINER_NAME"]}`;
162
+ const inputPrefix = "example_patient_1";
163
+ const outputPrefix = process.env["OUTPUT_PREFIX"] || "_output";
164
+
165
+ const client = DeidentificationClient(serviceEndpoint, credential);
166
+ const jobName = "sample-job-" + new Date().getTime().toString().slice(-8);
167
+
168
+ const job: DeidentificationJob = {
169
+ operation: "Surrogate",
170
+ sourceLocation: { location: storageLocation, prefix: inputPrefix },
171
+ targetLocation: { location: storageLocation, prefix: outputPrefix },
172
+ };
173
+ const response = (await client
174
+ .path("/jobs/{name}", jobName)
175
+ .put({ body: job })) as DeidentifyDocumentsDefaultResponse;
176
+
177
+ if (isUnexpected(response)) {
178
+ throw response.body.error;
179
+ }
180
+
181
+ const poller = await getLongRunningPoller(client, response);
182
+ const finalOutput = await poller.pollUntilDone();
183
+ console.log(finalOutput.body);
184
+ ```
185
+
186
+ ## Next steps
187
+
188
+ Find a bug, or have feedback? Raise an issue with the [Health Deidentification][github_issue_label] label.
86
189
 
87
190
  ## Troubleshooting
88
191
 
192
+ - **Unable to Access Source or Target Storage**
193
+ - Ensure you create your deid service with a system assigned managed identity
194
+ - Ensure your storage account has given permissions to that managed identity
195
+
89
196
  ### Logging
90
197
 
91
198
  Enabling logging may help uncover useful information about failures. In order to see a log of HTTP requests and responses, set the `AZURE_LOG_LEVEL` environment variable to `info`. Alternatively, logging can be enabled at runtime by calling `setLogLevel` in the `@azure/logger`:
92
199
 
93
- ```javascript
94
- const { setLogLevel } = require("@azure/logger");
200
+ ```ts snippet:SetLogLevel
201
+ import { setLogLevel } from "@azure/logger";
95
202
 
96
203
  setLogLevel("info");
97
204
  ```
98
205
 
99
206
  For more detailed instructions on how to enable logs, you can look at the [@azure/logger package docs](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger).
207
+
208
+ <!-- LINKS -->
209
+ [azure_sub]: https://azure.microsoft.com/free/
210
+ [deid_quickstart]: https://learn.microsoft.com/azure/healthcare-apis/deidentification/quickstart
211
+ [deid_redact]: https://learn.microsoft.com/azure/healthcare-apis/deidentification/redaction-format
212
+ [deid_rbac]: https://learn.microsoft.com/azure/healthcare-apis/deidentification/manage-access-rbac
213
+ [deid_managed_identity]: https://learn.microsoft.com/azure/healthcare-apis/deidentification/managed-identities
214
+ [deid_configure_storage]: https://learn.microsoft.com/azure/healthcare-apis/deidentification/configure-storage
215
+ [azure_cli]: https://learn.microsoft.com/cli/azure/healthcareapis/deidservice?view=azure-cli-latest
216
+ [azure_portal]: https://ms.portal.azure.com
217
+ [github_issue_label]: https://github.com/Azure/azure-sdk-for-js/labels/Health%20Deidentification
@@ -1,11 +1,11 @@
1
- import { GetJobParameters, CreateJobParameters, DeleteJobParameters, ListJobsParameters, ListJobDocumentsParameters, CancelJobParameters, DeidentifyParameters } from "./parameters.js";
2
- import { GetJob200Response, GetJobDefaultResponse, CreateJob200Response, CreateJob201Response, CreateJobDefaultResponse, DeleteJob204Response, DeleteJobDefaultResponse, ListJobs200Response, ListJobsDefaultResponse, ListJobDocuments200Response, ListJobDocumentsDefaultResponse, CancelJob200Response, CancelJobDefaultResponse, Deidentify200Response, DeidentifyDefaultResponse } from "./responses.js";
3
- import { Client, StreamableMethod } from "@azure-rest/core-client";
1
+ import type { GetJobParameters, DeidentifyDocumentsParameters, DeleteJobParameters, ListJobsParameters, ListJobDocumentsParameters, CancelJobParameters, DeidentifyTextParameters } from "./parameters.js";
2
+ import type { GetJob200Response, GetJobDefaultResponse, DeidentifyDocuments200Response, DeidentifyDocuments201Response, DeidentifyDocumentsDefaultResponse, DeleteJob204Response, DeleteJobDefaultResponse, ListJobs200Response, ListJobsDefaultResponse, ListJobDocuments200Response, ListJobDocumentsDefaultResponse, CancelJob200Response, CancelJobDefaultResponse, DeidentifyText200Response, DeidentifyTextDefaultResponse } from "./responses.js";
3
+ import type { Client, StreamableMethod } from "@azure-rest/core-client";
4
4
  export interface GetJob {
5
5
  /** Resource read operation template. */
6
6
  get(options?: GetJobParameters): StreamableMethod<GetJob200Response | GetJobDefaultResponse>;
7
7
  /** Long-running resource create or replace operation template. */
8
- put(options: CreateJobParameters): StreamableMethod<CreateJob200Response | CreateJob201Response | CreateJobDefaultResponse>;
8
+ put(options: DeidentifyDocumentsParameters): StreamableMethod<DeidentifyDocuments200Response | DeidentifyDocuments201Response | DeidentifyDocumentsDefaultResponse>;
9
9
  /** Removes the record of the job from the service. Does not delete any documents. */
10
10
  delete(options?: DeleteJobParameters): StreamableMethod<DeleteJob204Response | DeleteJobDefaultResponse>;
11
11
  }
@@ -27,9 +27,9 @@ export interface CancelJob {
27
27
  */
28
28
  post(options?: CancelJobParameters): StreamableMethod<CancelJob200Response | CancelJobDefaultResponse>;
29
29
  }
30
- export interface Deidentify {
30
+ export interface DeidentifyText {
31
31
  /** A remote procedure call (RPC) operation. */
32
- post(options: DeidentifyParameters): StreamableMethod<Deidentify200Response | DeidentifyDefaultResponse>;
32
+ post(options: DeidentifyTextParameters): StreamableMethod<DeidentifyText200Response | DeidentifyTextDefaultResponse>;
33
33
  }
34
34
  export interface Routes {
35
35
  /** Resource for '/jobs/\{name\}' has methods for the following verbs: get, put, delete */
@@ -41,7 +41,7 @@ export interface Routes {
41
41
  /** Resource for '/jobs/\{name\}:cancel' has methods for the following verbs: post */
42
42
  (path: "/jobs/{name}:cancel", name: string): CancelJob;
43
43
  /** Resource for '/deid' has methods for the following verbs: post */
44
- (path: "/deid"): Deidentify;
44
+ (path: "/deid"): DeidentifyText;
45
45
  }
46
46
  export type DeidentificationClient = Client & {
47
47
  path: Routes;
@@ -1 +1 @@
1
- {"version":3,"file":"clientDefinitions.d.ts","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,wCAAwC;IACxC,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,CAAC;IAC7F,kEAAkE;IAClE,GAAG,CACD,OAAO,EAAE,mBAAmB,GAC3B,gBAAgB,CAAC,oBAAoB,GAAG,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;IAC5F,qFAAqF;IACrF,MAAM,CACJ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,gBAAgB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,GAAG,CACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,gBAAgB,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,GAAG,CACD,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAAC,2BAA2B,GAAG,+BAA+B,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,mBAAmB,GAC5B,gBAAgB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,IAAI,CACF,OAAO,EAAE,oBAAoB,GAC5B,gBAAgB,CAAC,qBAAqB,GAAG,yBAAyB,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,MAAM;IACrB,0FAA0F;IAC1F,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,oEAAoE;IACpE,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,uFAAuF;IACvF,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACjE,qFAAqF;IACrF,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,qEAAqE;IACrE,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"clientDefinitions.d.ts","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,WAAW,MAAM;IACrB,wCAAwC;IACxC,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC,iBAAiB,GAAG,qBAAqB,CAAC,CAAC;IAC7F,kEAAkE;IAClE,GAAG,CACD,OAAO,EAAE,6BAA6B,GACrC,gBAAgB,CACf,8BAA8B,GAC9B,8BAA8B,GAC9B,kCAAkC,CACrC,CAAC;IACF,qFAAqF;IACrF,MAAM,CACJ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,gBAAgB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,GAAG,CACD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,gBAAgB,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,GAAG,CACD,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAAC,2BAA2B,GAAG,+BAA+B,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,IAAI,CACF,OAAO,CAAC,EAAE,mBAAmB,GAC5B,gBAAgB,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,IAAI,CACF,OAAO,EAAE,wBAAwB,GAChC,gBAAgB,CAAC,yBAAyB,GAAG,6BAA6B,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,MAAM;IACrB,0FAA0F;IAC1F,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,oEAAoE;IACpE,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,uFAAuF;IACvF,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACjE,qFAAqF;IACrF,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,qEAAqE;IACrE,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC;CACjC;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1,4 +1,4 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  export {};
4
4
  //# sourceMappingURL=clientDefinitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clientDefinitions.js","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetJobParameters,\n CreateJobParameters,\n DeleteJobParameters,\n ListJobsParameters,\n ListJobDocumentsParameters,\n CancelJobParameters,\n DeidentifyParameters,\n} from \"./parameters.js\";\nimport {\n GetJob200Response,\n GetJobDefaultResponse,\n CreateJob200Response,\n CreateJob201Response,\n CreateJobDefaultResponse,\n DeleteJob204Response,\n DeleteJobDefaultResponse,\n ListJobs200Response,\n ListJobsDefaultResponse,\n ListJobDocuments200Response,\n ListJobDocumentsDefaultResponse,\n CancelJob200Response,\n CancelJobDefaultResponse,\n Deidentify200Response,\n DeidentifyDefaultResponse,\n} from \"./responses.js\";\nimport { Client, StreamableMethod } from \"@azure-rest/core-client\";\n\nexport interface GetJob {\n /** Resource read operation template. */\n get(options?: GetJobParameters): StreamableMethod<GetJob200Response | GetJobDefaultResponse>;\n /** Long-running resource create or replace operation template. */\n put(\n options: CreateJobParameters,\n ): StreamableMethod<CreateJob200Response | CreateJob201Response | CreateJobDefaultResponse>;\n /** Removes the record of the job from the service. Does not delete any documents. */\n delete(\n options?: DeleteJobParameters,\n ): StreamableMethod<DeleteJob204Response | DeleteJobDefaultResponse>;\n}\n\nexport interface ListJobs {\n /** Resource list operation template. */\n get(\n options?: ListJobsParameters,\n ): StreamableMethod<ListJobs200Response | ListJobsDefaultResponse>;\n}\n\nexport interface ListJobDocuments {\n /** Resource list operation template. */\n get(\n options?: ListJobDocumentsParameters,\n ): StreamableMethod<ListJobDocuments200Response | ListJobDocumentsDefaultResponse>;\n}\n\nexport interface CancelJob {\n /**\n * Cancels a job that is in progress.\n *\n * The job will be marked as canceled and the service will stop processing the job. The service will not delete any documents that have already been processed.\n *\n * If the job is already complete, this will have no effect.\n */\n post(\n options?: CancelJobParameters,\n ): StreamableMethod<CancelJob200Response | CancelJobDefaultResponse>;\n}\n\nexport interface Deidentify {\n /** A remote procedure call (RPC) operation. */\n post(\n options: DeidentifyParameters,\n ): StreamableMethod<Deidentify200Response | DeidentifyDefaultResponse>;\n}\n\nexport interface Routes {\n /** Resource for '/jobs/\\{name\\}' has methods for the following verbs: get, put, delete */\n (path: \"/jobs/{name}\", name: string): GetJob;\n /** Resource for '/jobs' has methods for the following verbs: get */\n (path: \"/jobs\"): ListJobs;\n /** Resource for '/jobs/\\{name\\}/documents' has methods for the following verbs: get */\n (path: \"/jobs/{name}/documents\", name: string): ListJobDocuments;\n /** Resource for '/jobs/\\{name\\}:cancel' has methods for the following verbs: post */\n (path: \"/jobs/{name}:cancel\", name: string): CancelJob;\n /** Resource for '/deid' has methods for the following verbs: post */\n (path: \"/deid\"): Deidentify;\n}\n\nexport type DeidentificationClient = Client & {\n path: Routes;\n};\n"]}
1
+ {"version":3,"file":"clientDefinitions.js","sourceRoot":"","sources":["../../src/clientDefinitions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetJobParameters,\n DeidentifyDocumentsParameters,\n DeleteJobParameters,\n ListJobsParameters,\n ListJobDocumentsParameters,\n CancelJobParameters,\n DeidentifyTextParameters,\n} from \"./parameters.js\";\nimport type {\n GetJob200Response,\n GetJobDefaultResponse,\n DeidentifyDocuments200Response,\n DeidentifyDocuments201Response,\n DeidentifyDocumentsDefaultResponse,\n DeleteJob204Response,\n DeleteJobDefaultResponse,\n ListJobs200Response,\n ListJobsDefaultResponse,\n ListJobDocuments200Response,\n ListJobDocumentsDefaultResponse,\n CancelJob200Response,\n CancelJobDefaultResponse,\n DeidentifyText200Response,\n DeidentifyTextDefaultResponse,\n} from \"./responses.js\";\nimport type { Client, StreamableMethod } from \"@azure-rest/core-client\";\n\nexport interface GetJob {\n /** Resource read operation template. */\n get(options?: GetJobParameters): StreamableMethod<GetJob200Response | GetJobDefaultResponse>;\n /** Long-running resource create or replace operation template. */\n put(\n options: DeidentifyDocumentsParameters,\n ): StreamableMethod<\n | DeidentifyDocuments200Response\n | DeidentifyDocuments201Response\n | DeidentifyDocumentsDefaultResponse\n >;\n /** Removes the record of the job from the service. Does not delete any documents. */\n delete(\n options?: DeleteJobParameters,\n ): StreamableMethod<DeleteJob204Response | DeleteJobDefaultResponse>;\n}\n\nexport interface ListJobs {\n /** Resource list operation template. */\n get(\n options?: ListJobsParameters,\n ): StreamableMethod<ListJobs200Response | ListJobsDefaultResponse>;\n}\n\nexport interface ListJobDocuments {\n /** Resource list operation template. */\n get(\n options?: ListJobDocumentsParameters,\n ): StreamableMethod<ListJobDocuments200Response | ListJobDocumentsDefaultResponse>;\n}\n\nexport interface CancelJob {\n /**\n * Cancels a job that is in progress.\n *\n * The job will be marked as canceled and the service will stop processing the job. The service will not delete any documents that have already been processed.\n *\n * If the job is already complete, this will have no effect.\n */\n post(\n options?: CancelJobParameters,\n ): StreamableMethod<CancelJob200Response | CancelJobDefaultResponse>;\n}\n\nexport interface DeidentifyText {\n /** A remote procedure call (RPC) operation. */\n post(\n options: DeidentifyTextParameters,\n ): StreamableMethod<DeidentifyText200Response | DeidentifyTextDefaultResponse>;\n}\n\nexport interface Routes {\n /** Resource for '/jobs/\\{name\\}' has methods for the following verbs: get, put, delete */\n (path: \"/jobs/{name}\", name: string): GetJob;\n /** Resource for '/jobs' has methods for the following verbs: get */\n (path: \"/jobs\"): ListJobs;\n /** Resource for '/jobs/\\{name\\}/documents' has methods for the following verbs: get */\n (path: \"/jobs/{name}/documents\", name: string): ListJobDocuments;\n /** Resource for '/jobs/\\{name\\}:cancel' has methods for the following verbs: post */\n (path: \"/jobs/{name}:cancel\", name: string): CancelJob;\n /** Resource for '/deid' has methods for the following verbs: post */\n (path: \"/deid\"): DeidentifyText;\n}\n\nexport type DeidentificationClient = Client & {\n path: Routes;\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { ClientOptions } from "@azure-rest/core-client";
2
- import { TokenCredential } from "@azure/core-auth";
3
- import { DeidentificationClient } from "./clientDefinitions.js";
1
+ import type { ClientOptions } from "@azure-rest/core-client";
2
+ import type { TokenCredential } from "@azure/core-auth";
3
+ import type { DeidentificationClient } from "./clientDefinitions.js";
4
4
  /** The optional parameters for the client */
5
5
  export interface DeidentificationClientOptions extends ClientOptions {
6
6
  /** The api version option of the client */
@@ -1 +1 @@
1
- {"version":3,"file":"deidentificationClient.d.ts","sourceRoot":"","sources":["../../src/deidentificationClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,6CAA6C;AAC7C,MAAM,WAAW,6BAA8B,SAAQ,aAAa;IAClE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,EAC5B,EAAE,UAAiC,EAAE,GAAG,OAAO,EAAE,GAAE,6BAAkC,GACpF,sBAAsB,CAsCxB"}
1
+ {"version":3,"file":"deidentificationClient.d.ts","sourceRoot":"","sources":["../../src/deidentificationClient.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,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,6CAA6C;AAC7C,MAAM,WAAW,6BAA8B,SAAQ,aAAa;IAClE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,EAC5B,EAAE,UAAyB,EAAE,GAAG,OAAO,EAAE,GAAE,6BAAkC,GAC5E,sBAAsB,CAuCxB"}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import { __rest } from "tslib";
4
4
  import { getClient } from "@azure-rest/core-client";
5
5
  import { logger } from "./logger.js";
@@ -11,8 +11,8 @@ import { logger } from "./logger.js";
11
11
  */
12
12
  export default function createClient(endpointParam, credentials, _a = {}) {
13
13
  var _b, _c, _d, _e, _f, _g;
14
- var { apiVersion = "2024-07-12-preview" } = _a, options = __rest(_a, ["apiVersion"]);
15
- const endpointUrl = (_c = (_b = options.endpoint) !== null && _b !== void 0 ? _b : options.baseUrl) !== null && _c !== void 0 ? _c : `https://${endpointParam}`;
14
+ var { apiVersion = "2024-11-15" } = _a, options = __rest(_a, ["apiVersion"]);
15
+ const endpointUrl = (_c = (_b = options.endpoint) !== null && _b !== void 0 ? _b : options.baseUrl) !== null && _c !== void 0 ? _c : `${endpointParam}`;
16
16
  const userAgentInfo = `azsdk-js-health-deidentification-rest/1.0.0-beta.1`;
17
17
  const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
18
18
  ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`
@@ -1 +1 @@
1
- {"version":3,"file":"deidentificationClient.js","sourceRoot":"","sources":["../../src/deidentificationClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,OAAO,EAAE,SAAS,EAAiB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAqB,EACrB,WAA4B,EAC5B,KAAmF,EAAE;;QAArF,EAAE,UAAU,GAAG,oBAAoB,OAAkD,EAA7C,OAAO,cAA/C,cAAiD,CAAF;IAE/C,MAAM,WAAW,GAAG,MAAA,MAAA,OAAO,CAAC,QAAQ,mCAAI,OAAO,CAAC,OAAO,mCAAI,WAAW,aAAa,EAAE,CAAC;IACtF,MAAM,aAAa,GAAG,oDAAoD,CAAC;IAC3E,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,eAAe;QAClE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,IAAI,aAAa,EAAE;QAChE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;IACzB,OAAO,mCACF,OAAO,KACV,gBAAgB,EAAE;YAChB,eAAe;SAChB,EACD,cAAc,EAAE;YACd,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,cAAc,0CAAE,MAAM,mCAAI,MAAM,CAAC,IAAI;SACtD,EACD,WAAW,EAAE;YACX,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAE,MAAM,mCAAI,CAAC,iCAAiC,CAAC;SAC3E,GACF,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAA2B,CAAC;IAEtF,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACzB,qDAAqD;YACrD,yEAAyE;YACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC;gBACvD,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GACzD,eAAe,UAAU,EAAE,CAAC;YAC9B,CAAC;YAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { getClient, ClientOptions } from \"@azure-rest/core-client\";\nimport { logger } from \"./logger.js\";\nimport { TokenCredential } from \"@azure/core-auth\";\nimport { DeidentificationClient } from \"./clientDefinitions.js\";\n\n/** The optional parameters for the client */\nexport interface DeidentificationClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `DeidentificationClient`\n * @param endpointParam - Url of your De-identification Service.\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n endpointParam: string,\n credentials: TokenCredential,\n { apiVersion = \"2024-07-12-preview\", ...options }: DeidentificationClientOptions = {},\n): DeidentificationClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `https://${endpointParam}`;\n const userAgentInfo = `azsdk-js-health-deidentification-rest/1.0.0-beta.1`;\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://deid.azure.com/.default\"],\n },\n };\n const client = getClient(endpointUrl, credentials, options) as DeidentificationClient;\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 return client;\n}\n"]}
1
+ {"version":3,"file":"deidentificationClient.js","sourceRoot":"","sources":["../../src/deidentificationClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAqB,EACrB,WAA4B,EAC5B,KAA2E,EAAE;;QAA7E,EAAE,UAAU,GAAG,YAAY,OAAkD,EAA7C,OAAO,cAAvC,cAAyC,CAAF;IAEvC,MAAM,WAAW,GAAG,MAAA,MAAA,OAAO,CAAC,QAAQ,mCAAI,OAAO,CAAC,OAAO,mCAAI,GAAG,aAAa,EAAE,CAAC;IAC9E,MAAM,aAAa,GAAG,oDAAoD,CAAC;IAC3E,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,eAAe;QAClE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,IAAI,aAAa,EAAE;QAChE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;IACzB,OAAO,mCACF,OAAO,KACV,gBAAgB,EAAE;YAChB,eAAe;SAChB,EACD,cAAc,EAAE;YACd,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,cAAc,0CAAE,MAAM,mCAAI,MAAM,CAAC,IAAI;SACtD,EACD,WAAW,EAAE;YACX,MAAM,EAAE,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAE,MAAM,mCAAI,CAAC,iCAAiC,CAAC;SAC3E,GACF,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAA2B,CAAC;IAEtF,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACzB,qDAAqD;YACrD,yEAAyE;YACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC;gBACvD,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GACzD,eAAe,UAAU,EAAE,CAAC;YAC9B,CAAC;YAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","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 { DeidentificationClient } from \"./clientDefinitions.js\";\n\n/** The optional parameters for the client */\nexport interface DeidentificationClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `DeidentificationClient`\n * @param endpointParam - Url of your De-identification Service.\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n endpointParam: string,\n credentials: TokenCredential,\n { apiVersion = \"2024-11-15\", ...options }: DeidentificationClientOptions = {},\n): DeidentificationClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `${endpointParam}`;\n const userAgentInfo = `azsdk-js-health-deidentification-rest/1.0.0-beta.1`;\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://deid.azure.com/.default\"],\n },\n };\n const client = getClient(endpointUrl, credentials, options) as DeidentificationClient;\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"]}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import DeidentificationClient from "./deidentificationClient.js";
4
4
  export * from "./deidentificationClient.js";
5
5
  export * from "./parameters.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC,eAAe,sBAAsB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport DeidentificationClient from \"./deidentificationClient.js\";\n\nexport * from \"./deidentificationClient.js\";\nexport * from \"./parameters.js\";\nexport * from \"./responses.js\";\nexport * from \"./clientDefinitions.js\";\nexport * from \"./isUnexpected.js\";\nexport * from \"./models.js\";\nexport * from \"./outputModels.js\";\nexport * from \"./paginateHelper.js\";\nexport * from \"./pollingHelper.js\";\n\nexport default DeidentificationClient;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC,eAAe,sBAAsB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport DeidentificationClient from \"./deidentificationClient.js\";\n\nexport * from \"./deidentificationClient.js\";\nexport * from \"./parameters.js\";\nexport * from \"./responses.js\";\nexport * from \"./clientDefinitions.js\";\nexport * from \"./isUnexpected.js\";\nexport * from \"./models.js\";\nexport * from \"./outputModels.js\";\nexport * from \"./paginateHelper.js\";\nexport * from \"./pollingHelper.js\";\n\nexport default DeidentificationClient;\n"]}
@@ -1,9 +1,9 @@
1
- import { GetJob200Response, GetJobDefaultResponse, CreateJob200Response, CreateJob201Response, CreateJobLogicalResponse, CreateJobDefaultResponse, DeleteJob204Response, DeleteJobDefaultResponse, ListJobs200Response, ListJobsDefaultResponse, ListJobDocuments200Response, ListJobDocumentsDefaultResponse, CancelJob200Response, CancelJobDefaultResponse, Deidentify200Response, DeidentifyDefaultResponse } from "./responses.js";
1
+ import type { GetJob200Response, GetJobDefaultResponse, DeidentifyDocuments200Response, DeidentifyDocuments201Response, DeidentifyDocumentsLogicalResponse, DeidentifyDocumentsDefaultResponse, DeleteJob204Response, DeleteJobDefaultResponse, ListJobs200Response, ListJobsDefaultResponse, ListJobDocuments200Response, ListJobDocumentsDefaultResponse, CancelJob200Response, CancelJobDefaultResponse, DeidentifyText200Response, DeidentifyTextDefaultResponse } from "./responses.js";
2
2
  export declare function isUnexpected(response: GetJob200Response | GetJobDefaultResponse): response is GetJobDefaultResponse;
3
- export declare function isUnexpected(response: CreateJob200Response | CreateJob201Response | CreateJobLogicalResponse | CreateJobDefaultResponse): response is CreateJobDefaultResponse;
3
+ export declare function isUnexpected(response: DeidentifyDocuments200Response | DeidentifyDocuments201Response | DeidentifyDocumentsLogicalResponse | DeidentifyDocumentsDefaultResponse): response is DeidentifyDocumentsDefaultResponse;
4
4
  export declare function isUnexpected(response: DeleteJob204Response | DeleteJobDefaultResponse): response is DeleteJobDefaultResponse;
5
5
  export declare function isUnexpected(response: ListJobs200Response | ListJobsDefaultResponse): response is ListJobsDefaultResponse;
6
6
  export declare function isUnexpected(response: ListJobDocuments200Response | ListJobDocumentsDefaultResponse): response is ListJobDocumentsDefaultResponse;
7
7
  export declare function isUnexpected(response: CancelJob200Response | CancelJobDefaultResponse): response is CancelJobDefaultResponse;
8
- export declare function isUnexpected(response: Deidentify200Response | DeidentifyDefaultResponse): response is DeidentifyDefaultResponse;
8
+ export declare function isUnexpected(response: DeidentifyText200Response | DeidentifyTextDefaultResponse): response is DeidentifyTextDefaultResponse;
9
9
  //# sourceMappingURL=isUnexpected.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isUnexpected.d.ts","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AAYxB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,iBAAiB,GAAG,qBAAqB,GAClD,QAAQ,IAAI,qBAAqB,CAAC;AACrC,wBAAgB,YAAY,CAC1B,QAAQ,EACJ,oBAAoB,GACpB,oBAAoB,GACpB,wBAAwB,GACxB,wBAAwB,GAC3B,QAAQ,IAAI,wBAAwB,CAAC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,GAAG,wBAAwB,GACxD,QAAQ,IAAI,wBAAwB,CAAC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,GAAG,uBAAuB,GACtD,QAAQ,IAAI,uBAAuB,CAAC;AACvC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,2BAA2B,GAAG,+BAA+B,GACtE,QAAQ,IAAI,+BAA+B,CAAC;AAC/C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,GAAG,wBAAwB,GACxD,QAAQ,IAAI,wBAAwB,CAAC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,qBAAqB,GAAG,yBAAyB,GAC1D,QAAQ,IAAI,yBAAyB,CAAC"}
1
+ {"version":3,"file":"isUnexpected.d.ts","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,kCAAkC,EAClC,kCAAkC,EAClC,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAYxB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,iBAAiB,GAAG,qBAAqB,GAClD,QAAQ,IAAI,qBAAqB,CAAC;AACrC,wBAAgB,YAAY,CAC1B,QAAQ,EACJ,8BAA8B,GAC9B,8BAA8B,GAC9B,kCAAkC,GAClC,kCAAkC,GACrC,QAAQ,IAAI,kCAAkC,CAAC;AAClD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,GAAG,wBAAwB,GACxD,QAAQ,IAAI,wBAAwB,CAAC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,GAAG,uBAAuB,GACtD,QAAQ,IAAI,uBAAuB,CAAC;AACvC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,2BAA2B,GAAG,+BAA+B,GACtE,QAAQ,IAAI,+BAA+B,CAAC;AAC/C,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,GAAG,wBAAwB,GACxD,QAAQ,IAAI,wBAAwB,CAAC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,yBAAyB,GAAG,6BAA6B,GAClE,QAAQ,IAAI,6BAA6B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  const responseMap = {
4
4
  "GET /jobs/{name}": ["200"],
5
5
  "PUT /jobs/{name}": ["200", "201"],
@@ -1 +1 @@
1
- {"version":3,"file":"isUnexpected.js","sourceRoot":"","sources":["../../src/isUnexpected.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAqBlC,MAAM,WAAW,GAA6B;IAC5C,kBAAkB,EAAE,CAAC,KAAK,CAAC;IAC3B,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAClC,qBAAqB,EAAE,CAAC,KAAK,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,CAAC;IACpB,4BAA4B,EAAE,CAAC,KAAK,CAAC;IACrC,0BAA0B,EAAE,CAAC,KAAK,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,CAAC;CACtB,CAAC;AA2BF,MAAM,UAAU,YAAY,CAC1B,QAgB6B;IAS7B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc,EAAE,IAAY;;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,+CAA+C;IAC/C,2CAA2C;IAC3C,8CAA8C;IAC9C,IAAI,UAAU,GAAG,CAAC,CAAC,EACjB,YAAY,GAAa,EAAE,CAAC;IAE9B,0CAA0C;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,0DAA0D;QAC1D,gBAAgB;QAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,gCAAgC;QAChC,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhD,6DAA6D;QAC7D,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7F,IAAI,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,GAAG,CAAC,KAAI,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,GAAG,CAAC,MAAK,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAC/C,GAAG,GAAG,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC;gBAClC,4DAA4D;gBAC5D,qDAAqD;gBACrD,eAAe;gBACf,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAC1E,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,SAAS;YACX,CAAC;YAED,8CAA8C;YAC9C,wDAAwD;YACxD,2CAA2C;YAC3C,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,sEAAsE;QACtE,IAAI,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YAC/C,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;YAClC,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n GetJob200Response,\n GetJobDefaultResponse,\n CreateJob200Response,\n CreateJob201Response,\n CreateJobLogicalResponse,\n CreateJobDefaultResponse,\n DeleteJob204Response,\n DeleteJobDefaultResponse,\n ListJobs200Response,\n ListJobsDefaultResponse,\n ListJobDocuments200Response,\n ListJobDocumentsDefaultResponse,\n CancelJob200Response,\n CancelJobDefaultResponse,\n Deidentify200Response,\n DeidentifyDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"GET /jobs/{name}\": [\"200\"],\n \"PUT /jobs/{name}\": [\"200\", \"201\"],\n \"DELETE /jobs/{name}\": [\"204\"],\n \"GET /jobs\": [\"200\"],\n \"GET /jobs/{name}/documents\": [\"200\"],\n \"POST /jobs/{name}:cancel\": [\"200\"],\n \"POST /deid\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetJob200Response | GetJobDefaultResponse,\n): response is GetJobDefaultResponse;\nexport function isUnexpected(\n response:\n | CreateJob200Response\n | CreateJob201Response\n | CreateJobLogicalResponse\n | CreateJobDefaultResponse,\n): response is CreateJobDefaultResponse;\nexport function isUnexpected(\n response: DeleteJob204Response | DeleteJobDefaultResponse,\n): response is DeleteJobDefaultResponse;\nexport function isUnexpected(\n response: ListJobs200Response | ListJobsDefaultResponse,\n): response is ListJobsDefaultResponse;\nexport function isUnexpected(\n response: ListJobDocuments200Response | ListJobDocumentsDefaultResponse,\n): response is ListJobDocumentsDefaultResponse;\nexport function isUnexpected(\n response: CancelJob200Response | CancelJobDefaultResponse,\n): response is CancelJobDefaultResponse;\nexport function isUnexpected(\n response: Deidentify200Response | DeidentifyDefaultResponse,\n): response is DeidentifyDefaultResponse;\nexport function isUnexpected(\n response:\n | GetJob200Response\n | GetJobDefaultResponse\n | CreateJob200Response\n | CreateJob201Response\n | CreateJobLogicalResponse\n | CreateJobDefaultResponse\n | DeleteJob204Response\n | DeleteJobDefaultResponse\n | ListJobs200Response\n | ListJobsDefaultResponse\n | ListJobDocuments200Response\n | ListJobDocumentsDefaultResponse\n | CancelJob200Response\n | CancelJobDefaultResponse\n | Deidentify200Response\n | DeidentifyDefaultResponse,\n): response is\n | GetJobDefaultResponse\n | CreateJobDefaultResponse\n | DeleteJobDefaultResponse\n | ListJobsDefaultResponse\n | ListJobDocumentsDefaultResponse\n | CancelJobDefaultResponse\n | DeidentifyDefaultResponse {\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":"AAAA,uCAAuC;AACvC,kCAAkC;AAqBlC,MAAM,WAAW,GAA6B;IAC5C,kBAAkB,EAAE,CAAC,KAAK,CAAC;IAC3B,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IAClC,qBAAqB,EAAE,CAAC,KAAK,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,CAAC;IACpB,4BAA4B,EAAE,CAAC,KAAK,CAAC;IACrC,0BAA0B,EAAE,CAAC,KAAK,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,CAAC;CACtB,CAAC;AA2BF,MAAM,UAAU,YAAY,CAC1B,QAgBiC;IASjC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,IAAI,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc,EAAE,IAAY;;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,+CAA+C;IAC/C,2CAA2C;IAC3C,8CAA8C;IAC9C,IAAI,UAAU,GAAG,CAAC,CAAC,EACjB,YAAY,GAAa,EAAE,CAAC;IAE9B,0CAA0C;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,0DAA0D;QAC1D,gBAAgB;QAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,gCAAgC;QAChC,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhD,6DAA6D;QAC7D,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7F,IAAI,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,GAAG,CAAC,KAAI,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,OAAO,CAAC,GAAG,CAAC,MAAK,CAAC,CAAC,EAAE,CAAC;gBACjF,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAC/C,GAAG,GAAG,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC;gBAClC,4DAA4D;gBAC5D,qDAAqD;gBACrD,eAAe;gBACf,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,MAAA,cAAc,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAC1E,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,SAAS;YACX,CAAC;YAED,8CAA8C;YAC9C,wDAAwD;YACxD,2CAA2C;YAC3C,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,sEAAsE;QACtE,IAAI,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YAC/C,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;YAClC,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n GetJob200Response,\n GetJobDefaultResponse,\n DeidentifyDocuments200Response,\n DeidentifyDocuments201Response,\n DeidentifyDocumentsLogicalResponse,\n DeidentifyDocumentsDefaultResponse,\n DeleteJob204Response,\n DeleteJobDefaultResponse,\n ListJobs200Response,\n ListJobsDefaultResponse,\n ListJobDocuments200Response,\n ListJobDocumentsDefaultResponse,\n CancelJob200Response,\n CancelJobDefaultResponse,\n DeidentifyText200Response,\n DeidentifyTextDefaultResponse,\n} from \"./responses.js\";\n\nconst responseMap: Record<string, string[]> = {\n \"GET /jobs/{name}\": [\"200\"],\n \"PUT /jobs/{name}\": [\"200\", \"201\"],\n \"DELETE /jobs/{name}\": [\"204\"],\n \"GET /jobs\": [\"200\"],\n \"GET /jobs/{name}/documents\": [\"200\"],\n \"POST /jobs/{name}:cancel\": [\"200\"],\n \"POST /deid\": [\"200\"],\n};\n\nexport function isUnexpected(\n response: GetJob200Response | GetJobDefaultResponse,\n): response is GetJobDefaultResponse;\nexport function isUnexpected(\n response:\n | DeidentifyDocuments200Response\n | DeidentifyDocuments201Response\n | DeidentifyDocumentsLogicalResponse\n | DeidentifyDocumentsDefaultResponse,\n): response is DeidentifyDocumentsDefaultResponse;\nexport function isUnexpected(\n response: DeleteJob204Response | DeleteJobDefaultResponse,\n): response is DeleteJobDefaultResponse;\nexport function isUnexpected(\n response: ListJobs200Response | ListJobsDefaultResponse,\n): response is ListJobsDefaultResponse;\nexport function isUnexpected(\n response: ListJobDocuments200Response | ListJobDocumentsDefaultResponse,\n): response is ListJobDocumentsDefaultResponse;\nexport function isUnexpected(\n response: CancelJob200Response | CancelJobDefaultResponse,\n): response is CancelJobDefaultResponse;\nexport function isUnexpected(\n response: DeidentifyText200Response | DeidentifyTextDefaultResponse,\n): response is DeidentifyTextDefaultResponse;\nexport function isUnexpected(\n response:\n | GetJob200Response\n | GetJobDefaultResponse\n | DeidentifyDocuments200Response\n | DeidentifyDocuments201Response\n | DeidentifyDocumentsLogicalResponse\n | DeidentifyDocumentsDefaultResponse\n | DeleteJob204Response\n | DeleteJobDefaultResponse\n | ListJobs200Response\n | ListJobsDefaultResponse\n | ListJobDocuments200Response\n | ListJobDocumentsDefaultResponse\n | CancelJob200Response\n | CancelJobDefaultResponse\n | DeidentifyText200Response\n | DeidentifyTextDefaultResponse,\n): response is\n | GetJobDefaultResponse\n | DeidentifyDocumentsDefaultResponse\n | DeleteJobDefaultResponse\n | ListJobsDefaultResponse\n | ListJobDocumentsDefaultResponse\n | CancelJobDefaultResponse\n | DeidentifyTextDefaultResponse {\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,5 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
2
+ // Licensed under the MIT License.
3
3
  import { createClientLogger } from "@azure/logger";
4
4
  export const logger = createClientLogger("health-deidentification");
5
5
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,yBAAyB,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\nexport const logger = createClientLogger(\"health-deidentification\");\n"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,yBAAyB,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"@azure/logger\";\nexport const logger = createClientLogger(\"health-deidentification\");\n"]}