@gravity-rail/cli 0.53.1 → 0.55.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.
- package/README.md +10 -0
- package/dist/{account-verify-phone-ABHHHGCC.js → account-verify-phone-4ZN7NJGW.js} +3 -3
- package/dist/{chunk-FSY2BM4J.js → chunk-BQ3WBHSA.js} +211 -33
- package/dist/chunk-BQ3WBHSA.js.map +1 -0
- package/dist/{chunk-FQMZ2EBF.js → chunk-WCMXS5CL.js} +2 -2
- package/dist/cli-utils.d.ts +23 -4
- package/dist/cli-utils.js +1 -1
- package/dist/gr.js +2934 -83
- package/dist/gr.js.map +1 -1
- package/dist/lib.d.ts +4 -1
- package/dist/lib.js +801 -26
- package/dist/lib.js.map +1 -1
- package/package.json +5 -3
- package/dist/chunk-FSY2BM4J.js.map +0 -1
- /package/dist/{account-verify-phone-ABHHHGCC.js.map → account-verify-phone-4ZN7NJGW.js.map} +0 -0
- /package/dist/{chunk-FQMZ2EBF.js.map → chunk-WCMXS5CL.js.map} +0 -0
package/dist/gr.js
CHANGED
|
@@ -15,12 +15,22 @@ import { stdout, stdin } from 'process';
|
|
|
15
15
|
import { writeFile, readFile } from 'fs/promises';
|
|
16
16
|
import { EventEmitter } from 'events';
|
|
17
17
|
|
|
18
|
-
createRequire(import.meta.url);
|
|
18
|
+
const require$1 = createRequire(import.meta.url);
|
|
19
19
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
20
20
|
dirname(__filename$1);
|
|
21
21
|
|
|
22
|
+
var __create = Object.create;
|
|
22
23
|
var __defProp = Object.defineProperty;
|
|
24
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
23
25
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
26
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
27
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
28
|
+
var __require = /* @__PURE__ */ ((x) => typeof require$1 !== "undefined" ? require$1 : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
29
|
+
get: (a, b) => (typeof require$1 !== "undefined" ? require$1 : a)[b]
|
|
30
|
+
}) : x)(function(x) {
|
|
31
|
+
if (typeof require$1 !== "undefined") return require$1.apply(this, arguments);
|
|
32
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
33
|
+
});
|
|
24
34
|
var __esm = (fn, res, err) => function __init() {
|
|
25
35
|
if (err) throw err[0];
|
|
26
36
|
try {
|
|
@@ -29,10 +39,33 @@ var __esm = (fn, res, err) => function __init() {
|
|
|
29
39
|
throw err = [e], e;
|
|
30
40
|
}
|
|
31
41
|
};
|
|
42
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
43
|
+
try {
|
|
44
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
45
|
+
} catch (e) {
|
|
46
|
+
throw mod = 0, e;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
32
49
|
var __export = (target, all) => {
|
|
33
50
|
for (var name in all)
|
|
34
51
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
35
52
|
};
|
|
53
|
+
var __copyProps = (to, from, except, desc) => {
|
|
54
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
55
|
+
for (let key of __getOwnPropNames(from))
|
|
56
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
57
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
58
|
+
}
|
|
59
|
+
return to;
|
|
60
|
+
};
|
|
61
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
62
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
63
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
64
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
65
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
66
|
+
__defProp(target, "default", { value: mod, enumerable: true }) ,
|
|
67
|
+
mod
|
|
68
|
+
));
|
|
36
69
|
|
|
37
70
|
// src/lib/errors.ts
|
|
38
71
|
function handleError(err) {
|
|
@@ -3131,7 +3164,7 @@ var init_libphonenumber_js = __esm({
|
|
|
3131
3164
|
}
|
|
3132
3165
|
});
|
|
3133
3166
|
|
|
3134
|
-
// ../sdk/dist/chunk-
|
|
3167
|
+
// ../sdk/dist/chunk-BF4MOZZO.js
|
|
3135
3168
|
function resourceWorkflowsPath(wid, ...segments) {
|
|
3136
3169
|
const tail = segments.map((segment) => encodeURIComponent(String(segment))).join("/");
|
|
3137
3170
|
const base = `w/${encodeURIComponent(wid)}/resource-workflows`;
|
|
@@ -3398,6 +3431,7 @@ function createApiModules(apiKey, baseUrl3, customFetch) {
|
|
|
3398
3431
|
qualifications: new QualificationsApi(apiKey, baseUrl3, customFetch),
|
|
3399
3432
|
personas: new PersonasApi(apiKey, baseUrl3, customFetch),
|
|
3400
3433
|
metrics: new MetricsApi(apiKey, baseUrl3, customFetch),
|
|
3434
|
+
dataReports: new DataReportsApi(apiKey, baseUrl3, customFetch),
|
|
3401
3435
|
queries: new QueriesApi(apiKey, baseUrl3, customFetch),
|
|
3402
3436
|
reports: new ReportsApi(apiKey, baseUrl3, customFetch),
|
|
3403
3437
|
resourceWorkflows: new ResourceWorkflowsApi(apiKey, baseUrl3, customFetch),
|
|
@@ -3720,6 +3754,7 @@ function bindMembersMethods(target, members) {
|
|
|
3720
3754
|
}
|
|
3721
3755
|
function bindWorkspacesMethods(target, workspaces, signupRequests) {
|
|
3722
3756
|
target.getWorkspaces = workspaces.getWorkspaces.bind(workspaces);
|
|
3757
|
+
target.getOrganizationWorkspacePages = workspaces.getOrganizationWorkspacePages.bind(workspaces);
|
|
3723
3758
|
target.getDeviceAdmissibleWorkspaces = workspaces.getDeviceAdmissibleWorkspaces.bind(workspaces);
|
|
3724
3759
|
target.getPublicWorkspaces = workspaces.getPublicWorkspaces.bind(workspaces);
|
|
3725
3760
|
target.getWorkspace = workspaces.getWorkspace.bind(workspaces);
|
|
@@ -3915,6 +3950,7 @@ function bindFilesMethods(target, files) {
|
|
|
3915
3950
|
target.convertFile = files.convertFile.bind(files);
|
|
3916
3951
|
target.generateFileUploadUrl = files.generateFileUploadUrl.bind(files);
|
|
3917
3952
|
target.getFolders = files.getFolders.bind(files);
|
|
3953
|
+
target.getFolderChildren = files.getFolderChildren.bind(files);
|
|
3918
3954
|
target.getFolder = files.getFolder.bind(files);
|
|
3919
3955
|
target.createFolder = files.createFolder.bind(files);
|
|
3920
3956
|
target.updateFolder = files.updateFolder.bind(files);
|
|
@@ -3995,6 +4031,7 @@ function bindWorkflowsMethods(target, workflows, workflowNotes, voice, superviso
|
|
|
3995
4031
|
target.getWorkflowsActivityBatch = workflows.getWorkflowsActivityBatch.bind(workflows);
|
|
3996
4032
|
target.getWorkflowDiagram = workflows.getWorkflowDiagram.bind(workflows);
|
|
3997
4033
|
target.getWorkflowOutline = workflows.getWorkflowOutline.bind(workflows);
|
|
4034
|
+
target.getWorkflowsOutlineBatch = workflows.getWorkflowsOutlineBatch.bind(workflows);
|
|
3998
4035
|
target.createWorkflow = workflows.createWorkflow.bind(workflows);
|
|
3999
4036
|
target.updateWorkflow = workflows.updateWorkflow.bind(workflows);
|
|
4000
4037
|
target.getWorkflowDeletionPreview = workflows.getWorkflowDeletionPreview.bind(workflows);
|
|
@@ -4205,6 +4242,12 @@ function bindAppsMethods(target, apps, builders, inquiries, oauth, oauthConnecti
|
|
|
4205
4242
|
target.deleteInquiry = inquiries.deleteInquiry.bind(inquiries);
|
|
4206
4243
|
target.exportInquiriesCsv = inquiries.exportInquiriesCsv.bind(inquiries);
|
|
4207
4244
|
target.authorize = oauth.authorize.bind(oauth);
|
|
4245
|
+
target.denyAuthorization = oauth.denyAuthorization.bind(oauth);
|
|
4246
|
+
target.getOAuthConsentClient = oauth.getOAuthConsentClient.bind(oauth);
|
|
4247
|
+
target.getMcpConsentTargets = oauth.getMcpConsentTargets.bind(oauth);
|
|
4248
|
+
target.listMcpGrants = oauth.listMcpGrants.bind(oauth);
|
|
4249
|
+
target.narrowMcpGrant = oauth.narrowMcpGrant.bind(oauth);
|
|
4250
|
+
target.revokeMcpGrant = oauth.revokeMcpGrant.bind(oauth);
|
|
4208
4251
|
target.exchangeOAuthToken = oauth.exchangeOAuthToken.bind(oauth);
|
|
4209
4252
|
target.getAvailableScopes = oauth.getAvailableScopes.bind(oauth);
|
|
4210
4253
|
target.getOAuthConnectionStatus = oauthConnections.getConnectionStatus.bind(oauthConnections);
|
|
@@ -4302,6 +4345,8 @@ function bindIntegrationsMethods(target, mondayIntegration, discordBots, slackAp
|
|
|
4302
4345
|
target.fhirGetEncounterSyncRuns = fhirConnections.fhirGetEncounterSyncRuns.bind(fhirConnections);
|
|
4303
4346
|
target.fhirRefreshEncounterPatient = fhirConnections.fhirRefreshEncounterPatient.bind(fhirConnections);
|
|
4304
4347
|
target.fhirBackfillEncounterSync = fhirConnections.fhirBackfillEncounterSync.bind(fhirConnections);
|
|
4348
|
+
target.fhirStartOnboardingImport = fhirConnections.fhirStartOnboardingImport.bind(fhirConnections);
|
|
4349
|
+
target.fhirGetOnboardingImportStatus = fhirConnections.fhirGetOnboardingImportStatus.bind(fhirConnections);
|
|
4305
4350
|
target.configurePatientSync = patientSyncConnections.configurePatientSync.bind(patientSyncConnections);
|
|
4306
4351
|
target.getPatientSyncStatus = patientSyncConnections.getPatientSyncStatus.bind(patientSyncConnections);
|
|
4307
4352
|
target.deletePatientSyncConnection = patientSyncConnections.deletePatientSyncConnection.bind(patientSyncConnections);
|
|
@@ -4388,6 +4433,7 @@ function bindIntegrationsMethods(target, mondayIntegration, discordBots, slackAp
|
|
|
4388
4433
|
target.listAvailableAppConnections = appConnections.listAvailableAppConnections.bind(appConnections);
|
|
4389
4434
|
target.listAppConnections = appConnections.listAppConnections.bind(appConnections);
|
|
4390
4435
|
target.enablePlatformApp = appConnections.enablePlatformApp.bind(appConnections);
|
|
4436
|
+
target.configureZendeskConnection = appConnections.configureZendeskConnection.bind(appConnections);
|
|
4391
4437
|
target.getPlatformApp = appConnections.getPlatformApp.bind(appConnections);
|
|
4392
4438
|
target.updatePlatformApp = appConnections.updatePlatformApp.bind(appConnections);
|
|
4393
4439
|
target.deletePlatformApp = appConnections.deletePlatformApp.bind(appConnections);
|
|
@@ -4436,6 +4482,7 @@ function bindOrgMethods(target, org) {
|
|
|
4436
4482
|
target.getVoiceTrustProducts = org.getVoiceTrustProducts.bind(org);
|
|
4437
4483
|
target.syncVoiceTrustProducts = org.syncVoiceTrustProducts.bind(org);
|
|
4438
4484
|
target.createOrganizationWorkspace = org.createOrganizationWorkspace.bind(org);
|
|
4485
|
+
target.getOrganizationWorkspaces = org.getOrganizationWorkspaces.bind(org);
|
|
4439
4486
|
target.getOrganizationWorkspace = org.getOrganizationWorkspace.bind(org);
|
|
4440
4487
|
target.updateOrganizationWorkspace = org.updateOrganizationWorkspace.bind(org);
|
|
4441
4488
|
target.getOrgBillingCustomer = org.getOrgBillingCustomer.bind(org);
|
|
@@ -4445,7 +4492,20 @@ function bindOrgMethods(target, org) {
|
|
|
4445
4492
|
target.updateOrganizationMember = org.updateOrganizationMember.bind(org);
|
|
4446
4493
|
target.listOrgWebhookEndpoints = org.listOrgWebhookEndpoints.bind(org);
|
|
4447
4494
|
target.getOrgWebhookEndpoint = org.getOrgWebhookEndpoint.bind(org);
|
|
4495
|
+
target.createOrgWebhookEndpoint = org.createOrgWebhookEndpoint.bind(org);
|
|
4448
4496
|
target.updateOrgWebhookEndpoint = org.updateOrgWebhookEndpoint.bind(org);
|
|
4497
|
+
target.listOrgWebhookEndpointDeliveries = org.listOrgWebhookEndpointDeliveries.bind(org);
|
|
4498
|
+
target.replayOrgWebhookDelivery = org.replayOrgWebhookDelivery.bind(org);
|
|
4499
|
+
target.discardPendingOrgWebhookDeliveries = org.discardPendingOrgWebhookDeliveries.bind(org);
|
|
4500
|
+
target.getOrgWebhookEndpointCoverage = org.getOrgWebhookEndpointCoverage.bind(org);
|
|
4501
|
+
target.testOrgWebhookEndpoint = org.testOrgWebhookEndpoint.bind(org);
|
|
4502
|
+
target.listWorkspaceLabels = org.listWorkspaceLabels.bind(org);
|
|
4503
|
+
target.createWorkspaceLabel = org.createWorkspaceLabel.bind(org);
|
|
4504
|
+
target.updateWorkspaceLabel = org.updateWorkspaceLabel.bind(org);
|
|
4505
|
+
target.deleteWorkspaceLabel = org.deleteWorkspaceLabel.bind(org);
|
|
4506
|
+
target.getWorkspaceLabels = org.getWorkspaceLabels.bind(org);
|
|
4507
|
+
target.setWorkspaceLabels = org.setWorkspaceLabels.bind(org);
|
|
4508
|
+
target.previewWorkspaceScope = org.previewWorkspaceScope.bind(org);
|
|
4449
4509
|
}
|
|
4450
4510
|
function bindPronunciationsMethods(target, pronunciations) {
|
|
4451
4511
|
target.getPronunciationEntries = pronunciations.getPronunciationEntries.bind(pronunciations);
|
|
@@ -4584,6 +4644,9 @@ function bindMetricsMethods(target, metrics) {
|
|
|
4584
4644
|
target.getMetricSeries = metrics.getMetricSeries.bind(metrics);
|
|
4585
4645
|
target.computeChatMetrics = metrics.computeChatMetrics.bind(metrics);
|
|
4586
4646
|
}
|
|
4647
|
+
function bindDataReportsMethods(target, dataReports) {
|
|
4648
|
+
target.previewDataReport = dataReports.previewDataReport.bind(dataReports);
|
|
4649
|
+
}
|
|
4587
4650
|
function bindQueriesMethods(target, queries) {
|
|
4588
4651
|
target.getQueryFields = queries.getQueryFields.bind(queries);
|
|
4589
4652
|
target.validateQuery = queries.validateQuery.bind(queries);
|
|
@@ -4653,9 +4716,9 @@ function getRevisionState(workflow, revision) {
|
|
|
4653
4716
|
state: revision?.publishedAt != null ? "published" : "draft"
|
|
4654
4717
|
};
|
|
4655
4718
|
}
|
|
4656
|
-
var AbilitiesApi, ResourceWorkflowsApi, BundlesApi, InstallationsApi, AccessGrantsApi, AgentTasksApi, AgentsApi, AIModelsApi, ApiKeysApi, AppsApi, AssignmentsApi, VoiceApi, AuthApi, BuildersApi, CalendarsApi, CallsApi, CELApi, ChatsApi, ConfluenceApi, CustomToolkitsApi, DataTypesApi, DiscordBotsApi, SlackAppsApi, EventsApi, FeaturesApi, FhirConnectionsApi, InboundFaxStatus, DocumoFaxApi, HealthieApi, FilesApi, InboxesApi, InquiriesApi, AppConnectionsApi, McpServersApi, MemberImportValidationError, MembersApi, MondayIntegrationApi, NotificationRulesApi, OperatorApi, OrgApi, OAuthConnectionsApi, OAuthApi, PhoneNumbersApi, PronunciationsApi, PromptsApi, PersonasApi, QueriesApi, QualificationsApi, ReportsApi, RoutingRulesApi, SalesforceApi, ConnectionSyncApi, HubspotApi, SitesApi, SubscriptionsApi, SupportRequestsApi, CustomersApi, ResellersApi, SupervisorsApi, TasksApi, TemplatesApi, ToolkitsApi, JourneysApi, WorkflowsApi, WorkflowNotesApi, EventRuleObjectType, EventRuleEventType, EventRuleActionType, DriverMode, MEMBER_RELATIONSHIP_KINDS, WorkspaceInvitationsApi, WorkspacesApi, DashboardsApi, DevicesApi, TeamsAppsApi, ExperimentsApi, PatientSyncConnectionsApi, ActivityApi, MotdApi, InterventionRequestsApi, MetricsApi, ProjectsApi, TrackedLinksApi, WORKSPACE_METHOD_NAMES, WORKSPACE_METHOD_NAME_SET, GravityRailClient, WIDGET_SLUGS, CHAT_TYPES, BUILTIN_ASSISTANT_CHAT_TYPES, MEMBER_AGENT_CHAT_TYPES, ActivityGrain, ActivityGroupBy, ActivityOpenItemOrder, ActivityWindowBasis;
|
|
4657
|
-
var
|
|
4658
|
-
"../sdk/dist/chunk-
|
|
4719
|
+
var AbilitiesApi, ResourceWorkflowsApi, BundlesApi, InstallationsApi, AccessGrantsApi, AgentTasksApi, AgentsApi, AIModelsApi, ApiKeysApi, AppsApi, AssignmentsApi, VoiceApi, AuthApi, BuildersApi, CalendarsApi, CallsApi, CELApi, ChatsApi, ConfluenceApi, CustomToolkitsApi, DataTypesApi, DiscordBotsApi, SlackAppsApi, EventsApi, FeaturesApi, FhirConnectionsApi, InboundFaxStatus, DocumoFaxApi, HealthieApi, FilesApi, InboxesApi, InquiriesApi, AppConnectionsApi, McpServersApi, MemberImportValidationError, MembersApi, MondayIntegrationApi, NotificationRulesApi, OperatorApi, OrgApi, OAuthConnectionsApi, OAuthApi, PhoneNumbersApi, PronunciationsApi, PromptsApi, PersonasApi, QueriesApi, QualificationsApi, ReportsApi, RoutingRulesApi, SalesforceApi, ConnectionSyncApi, HubspotApi, SitesApi, SubscriptionsApi, SupportRequestsApi, CustomersApi, ResellersApi, SupervisorsApi, TasksApi, TemplatesApi, ToolkitsApi, JourneysApi, WorkflowsApi, WorkflowNotesApi, EventRuleObjectType, EventRuleEventType, EventRuleActionType, DriverMode, MEMBER_RELATIONSHIP_KINDS, WorkspaceInvitationsApi, WorkspacesApi, DashboardsApi, DevicesApi, TeamsAppsApi, ExperimentsApi, PatientSyncConnectionsApi, ActivityApi, MotdApi, InterventionRequestsApi, MetricsApi, DataReportsApi, ProjectsApi, TrackedLinksApi, WORKSPACE_METHOD_NAMES, WORKSPACE_METHOD_NAME_SET, GravityRailClient, WIDGET_SLUGS, CHAT_TYPES, BUILTIN_ASSISTANT_CHAT_TYPES, MEMBER_AGENT_CHAT_TYPES, ActivityGrain, ActivityGroupBy, ActivityOpenItemOrder, ActivityWindowBasis;
|
|
4720
|
+
var init_chunk_BF4MOZZO = __esm({
|
|
4721
|
+
"../sdk/dist/chunk-BF4MOZZO.js"() {
|
|
4659
4722
|
init_chunk_GCN4OMYU();
|
|
4660
4723
|
init_libphonenumber_js();
|
|
4661
4724
|
AbilitiesApi = class extends BaseApiClient {
|
|
@@ -7971,6 +8034,36 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
7971
8034
|
{ method: "POST", body: JSON.stringify(data) }
|
|
7972
8035
|
);
|
|
7973
8036
|
}
|
|
8037
|
+
/**
|
|
8038
|
+
* Start, resume, override or preview (dry run) an athenahealth connection's
|
|
8039
|
+
* onboarding import. The body is exactly the three mode flags; the server
|
|
8040
|
+
* traverses the connection's configured department/status pairs. Returns
|
|
8041
|
+
* 202 with the Temporal workflow and run ids. Requires `workspace:admin`.
|
|
8042
|
+
*/
|
|
8043
|
+
async fhirStartOnboardingImport(wid, connectionId, data = {}) {
|
|
8044
|
+
const body = {
|
|
8045
|
+
dryRun: data.dryRun ?? false,
|
|
8046
|
+
resume: data.resume ?? false,
|
|
8047
|
+
override: data.override ?? false
|
|
8048
|
+
};
|
|
8049
|
+
return this.fetch(
|
|
8050
|
+
`w/${wid}/app-connections/fhir/connections/${connectionId}/onboarding-import`,
|
|
8051
|
+
{
|
|
8052
|
+
method: "POST",
|
|
8053
|
+
body: JSON.stringify(body)
|
|
8054
|
+
}
|
|
8055
|
+
);
|
|
8056
|
+
}
|
|
8057
|
+
/**
|
|
8058
|
+
* Read an athenahealth connection's onboarding-import progress (durable,
|
|
8059
|
+
* approximate totals) and its known Temporal execution. GET-only: never
|
|
8060
|
+
* starts or resumes work. Requires `workspace:admin`.
|
|
8061
|
+
*/
|
|
8062
|
+
async fhirGetOnboardingImportStatus(wid, connectionId) {
|
|
8063
|
+
return this.fetch(
|
|
8064
|
+
`w/${wid}/app-connections/fhir/connections/${connectionId}/onboarding-import`
|
|
8065
|
+
);
|
|
8066
|
+
}
|
|
7974
8067
|
};
|
|
7975
8068
|
InboundFaxStatus = {
|
|
7976
8069
|
pending: "pending",
|
|
@@ -8173,8 +8266,8 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
8173
8266
|
* Download one file's bytes via GET ``.../files/{id}/contents/{filename}``.
|
|
8174
8267
|
*
|
|
8175
8268
|
* Uses this client's base URL (FastAPI on the app, same-origin ``/api/v2``
|
|
8176
|
-
* on scoped site sessions)
|
|
8177
|
-
*
|
|
8269
|
+
* on scoped site sessions). The Next.js ``/api/w/.../files/...`` route
|
|
8270
|
+
* redirects to this same contents path; calling it directly skips the hop.
|
|
8178
8271
|
*/
|
|
8179
8272
|
async downloadFileContents(wid, id, filename) {
|
|
8180
8273
|
const response = await this.fetchRaw(
|
|
@@ -8258,9 +8351,9 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
8258
8351
|
);
|
|
8259
8352
|
}
|
|
8260
8353
|
/**
|
|
8261
|
-
* Same-origin
|
|
8262
|
-
*
|
|
8263
|
-
*
|
|
8354
|
+
* Same-origin URL for a version's raw contents. The Next.js route
|
|
8355
|
+
* requires a session and redirects to the versioned FastAPI contents
|
|
8356
|
+
* endpoint. Mirrors the shape of `FileResponse.cdnUrl`.
|
|
8264
8357
|
*/
|
|
8265
8358
|
getFileVersionContentsUrl(wid, fileId, versionNumber) {
|
|
8266
8359
|
return `/api/w/${wid}/files/${fileId}/versions/${versionNumber}/contents`;
|
|
@@ -8292,6 +8385,19 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
8292
8385
|
const parentId = typeof parentIdOrOpts === "number" ? parentIdOrOpts : parentIdOrOpts.parentId;
|
|
8293
8386
|
return this.fetch(`w/${wid}/folders?parent_id=${parentId}`);
|
|
8294
8387
|
}
|
|
8388
|
+
/**
|
|
8389
|
+
* Readable children of many parents in one request.
|
|
8390
|
+
*
|
|
8391
|
+
* Every id comes back as a key. A parent with no readable children maps to
|
|
8392
|
+
* an empty list. The server accepts at most 100 ids per call.
|
|
8393
|
+
*/
|
|
8394
|
+
async getFolderChildren(wid, parentIds) {
|
|
8395
|
+
const params = new URLSearchParams();
|
|
8396
|
+
for (const parentId of parentIds) {
|
|
8397
|
+
params.append("parent_ids", String(parentId));
|
|
8398
|
+
}
|
|
8399
|
+
return this.fetch(`w/${wid}/folders/children?${params}`);
|
|
8400
|
+
}
|
|
8295
8401
|
/** Get a single folder by ID. */
|
|
8296
8402
|
async getFolder(wid, id) {
|
|
8297
8403
|
return this.fetch(`w/${wid}/folders/${id}`);
|
|
@@ -8699,6 +8805,19 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
8699
8805
|
body: JSON.stringify(data)
|
|
8700
8806
|
});
|
|
8701
8807
|
}
|
|
8808
|
+
/**
|
|
8809
|
+
* Create a public Zendesk Help Center connection with its sync paused.
|
|
8810
|
+
*
|
|
8811
|
+
* The acting Member becomes the sync owner. Later settings edits,
|
|
8812
|
+
* pause/resume, Sync now and run history use the generic connection-sync
|
|
8813
|
+
* methods (`updateConnectionSyncConfig`, `startSyncRun`, `getSyncRuns`).
|
|
8814
|
+
*/
|
|
8815
|
+
async configureZendeskConnection(wid, data) {
|
|
8816
|
+
return this.fetch(`w/${wid}/app-connections/zendesk/configure`, {
|
|
8817
|
+
method: "POST",
|
|
8818
|
+
body: JSON.stringify(data)
|
|
8819
|
+
});
|
|
8820
|
+
}
|
|
8702
8821
|
/**
|
|
8703
8822
|
* Get platform app connection details by UUID.
|
|
8704
8823
|
*/
|
|
@@ -10710,6 +10829,45 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
10710
10829
|
`o/${orgIdOrUuid}/webhooks/${endpointUuid}/deliveries?limit=${limit}`
|
|
10711
10830
|
);
|
|
10712
10831
|
}
|
|
10832
|
+
/**
|
|
10833
|
+
* Requeue one dead-lettered or expired delivery on its existing row.
|
|
10834
|
+
*
|
|
10835
|
+
* The response is identifiers only. The drain signs a fresh timestamp
|
|
10836
|
+
* when it sends; this call does not POST to the receiver.
|
|
10837
|
+
*/
|
|
10838
|
+
async replayOrgWebhookDelivery(orgIdOrUuid, endpointUuid, deliveryId) {
|
|
10839
|
+
return this.fetch(
|
|
10840
|
+
`o/${orgIdOrUuid}/webhooks/${endpointUuid}/deliveries/${deliveryId}/replay`,
|
|
10841
|
+
{
|
|
10842
|
+
method: "POST",
|
|
10843
|
+
body: JSON.stringify({})
|
|
10844
|
+
}
|
|
10845
|
+
);
|
|
10846
|
+
}
|
|
10847
|
+
/**
|
|
10848
|
+
* Expire every pending delivery of a paused or disabled endpoint, so a
|
|
10849
|
+
* resume does not re-send a held backlog the receiver keeps rejecting.
|
|
10850
|
+
* Refused with 409 while the endpoint is active. Dead-lettered rows
|
|
10851
|
+
* are untouched; expired rows stay replayable one at a time.
|
|
10852
|
+
*/
|
|
10853
|
+
async discardPendingOrgWebhookDeliveries(orgIdOrUuid, endpointUuid) {
|
|
10854
|
+
return this.fetch(
|
|
10855
|
+
`o/${orgIdOrUuid}/webhooks/${endpointUuid}/deliveries/discard-pending`,
|
|
10856
|
+
{
|
|
10857
|
+
method: "POST",
|
|
10858
|
+
body: JSON.stringify({})
|
|
10859
|
+
}
|
|
10860
|
+
);
|
|
10861
|
+
}
|
|
10862
|
+
/**
|
|
10863
|
+
* Which covered workspaces have the subscribed Forms opted in
|
|
10864
|
+
* (`webhookEventsEnabled`). Record events only.
|
|
10865
|
+
*/
|
|
10866
|
+
async getOrgWebhookEndpointCoverage(orgIdOrUuid, endpointUuid) {
|
|
10867
|
+
return this.fetch(
|
|
10868
|
+
`o/${orgIdOrUuid}/webhooks/${endpointUuid}/coverage`
|
|
10869
|
+
);
|
|
10870
|
+
}
|
|
10713
10871
|
/**
|
|
10714
10872
|
* A representative delivery body for one event type — what the test-send
|
|
10715
10873
|
* editor is prefilled with, and the same builder the public event catalog
|
|
@@ -10771,6 +10929,57 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
10771
10929
|
method: "DELETE"
|
|
10772
10930
|
});
|
|
10773
10931
|
}
|
|
10932
|
+
// =========================================================================
|
|
10933
|
+
// Workspace labels — the organization's own taxonomy of its workspaces
|
|
10934
|
+
// =========================================================================
|
|
10935
|
+
/** Every label of the organization, with workspace and webhook-selector counts. */
|
|
10936
|
+
async listWorkspaceLabels(orgIdOrUuid) {
|
|
10937
|
+
return this.fetch(`o/${orgIdOrUuid}/workspace-labels`);
|
|
10938
|
+
}
|
|
10939
|
+
async createWorkspaceLabel(orgIdOrUuid, data) {
|
|
10940
|
+
return this.fetch(`o/${orgIdOrUuid}/workspace-labels`, {
|
|
10941
|
+
method: "POST",
|
|
10942
|
+
body: JSON.stringify(data)
|
|
10943
|
+
});
|
|
10944
|
+
}
|
|
10945
|
+
/** Rename or recolor a label. The slug never changes. */
|
|
10946
|
+
async updateWorkspaceLabel(orgIdOrUuid, labelUuid, data) {
|
|
10947
|
+
return this.fetch(`o/${orgIdOrUuid}/workspace-labels/${labelUuid}`, {
|
|
10948
|
+
method: "PATCH",
|
|
10949
|
+
body: JSON.stringify(data)
|
|
10950
|
+
});
|
|
10951
|
+
}
|
|
10952
|
+
/** Delete a label. Refused (409) while a webhook label selector requires it. */
|
|
10953
|
+
async deleteWorkspaceLabel(orgIdOrUuid, labelUuid) {
|
|
10954
|
+
return this.fetch(`o/${orgIdOrUuid}/workspace-labels/${labelUuid}`, {
|
|
10955
|
+
method: "DELETE"
|
|
10956
|
+
});
|
|
10957
|
+
}
|
|
10958
|
+
/**
|
|
10959
|
+
* Which workspaces a webhook scope (explicit workspaces plus a label
|
|
10960
|
+
* selector) would cover right now. Both empty means the whole organization.
|
|
10961
|
+
*/
|
|
10962
|
+
async previewWorkspaceScope(orgIdOrUuid, data) {
|
|
10963
|
+
return this.fetch(
|
|
10964
|
+
`o/${orgIdOrUuid}/workspace-labels/preview-scope`,
|
|
10965
|
+
{ method: "POST", body: JSON.stringify(data) }
|
|
10966
|
+
);
|
|
10967
|
+
}
|
|
10968
|
+
async getWorkspaceLabels(orgIdOrUuid, workspaceUuid) {
|
|
10969
|
+
return this.fetch(
|
|
10970
|
+
`o/${orgIdOrUuid}/workspaces/${workspaceUuid}/labels`
|
|
10971
|
+
);
|
|
10972
|
+
}
|
|
10973
|
+
/**
|
|
10974
|
+
* Replace a workspace's labels with exactly `data.labels` (slugs). A slug the
|
|
10975
|
+
* organization has not used before creates that label.
|
|
10976
|
+
*/
|
|
10977
|
+
async setWorkspaceLabels(orgIdOrUuid, workspaceUuid, data) {
|
|
10978
|
+
return this.fetch(
|
|
10979
|
+
`o/${orgIdOrUuid}/workspaces/${workspaceUuid}/labels`,
|
|
10980
|
+
{ method: "PUT", body: JSON.stringify(data) }
|
|
10981
|
+
);
|
|
10982
|
+
}
|
|
10774
10983
|
};
|
|
10775
10984
|
OAuthConnectionsApi = class extends BaseApiClient {
|
|
10776
10985
|
async getConnectionStatus(providerSlug) {
|
|
@@ -10801,6 +11010,39 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
10801
11010
|
body: JSON.stringify(request)
|
|
10802
11011
|
});
|
|
10803
11012
|
}
|
|
11013
|
+
async denyAuthorization(request) {
|
|
11014
|
+
return this.fetch("oauth/authorize/deny", {
|
|
11015
|
+
method: "POST",
|
|
11016
|
+
body: JSON.stringify(request)
|
|
11017
|
+
});
|
|
11018
|
+
}
|
|
11019
|
+
async getOAuthConsentClient(clientId, redirectUri, resource) {
|
|
11020
|
+
const params = new URLSearchParams({ client_id: clientId, redirect_uri: redirectUri });
|
|
11021
|
+
if (resource) params.set("resource", resource);
|
|
11022
|
+
return this.fetch(`oauth/authorize/client?${params.toString()}`);
|
|
11023
|
+
}
|
|
11024
|
+
/** The organizations and workspaces the MCP consent screen may offer. */
|
|
11025
|
+
async getMcpConsentTargets(clientId) {
|
|
11026
|
+
const params = new URLSearchParams({ client_id: clientId });
|
|
11027
|
+
return this.fetch(`oauth/authorize/mcp-targets?${params.toString()}`);
|
|
11028
|
+
}
|
|
11029
|
+
/** The signed-in account's MCP grants. */
|
|
11030
|
+
async listMcpGrants() {
|
|
11031
|
+
return this.fetch("oauth/mcp-grants");
|
|
11032
|
+
}
|
|
11033
|
+
/** Remove organizations or workspaces from one MCP grant. */
|
|
11034
|
+
async narrowMcpGrant(grantId, removeTargetIds) {
|
|
11035
|
+
return this.fetch(`oauth/mcp-grants/${encodeURIComponent(grantId)}`, {
|
|
11036
|
+
method: "PATCH",
|
|
11037
|
+
body: JSON.stringify({ removeTargetIds })
|
|
11038
|
+
});
|
|
11039
|
+
}
|
|
11040
|
+
/** Revoke one MCP grant. */
|
|
11041
|
+
async revokeMcpGrant(grantId) {
|
|
11042
|
+
return this.fetch(`oauth/mcp-grants/${encodeURIComponent(grantId)}`, {
|
|
11043
|
+
method: "DELETE"
|
|
11044
|
+
});
|
|
11045
|
+
}
|
|
10804
11046
|
async exchangeOAuthToken(request) {
|
|
10805
11047
|
const formData = new URLSearchParams();
|
|
10806
11048
|
formData.append("grant_type", request.grant_type);
|
|
@@ -13172,6 +13414,20 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
13172
13414
|
async getWorkflowOutline(wid, id) {
|
|
13173
13415
|
return this.fetch(`w/${wid}/workflows/${id}/outline`);
|
|
13174
13416
|
}
|
|
13417
|
+
/**
|
|
13418
|
+
* Outlines for many Workflows in one request. The same shape as
|
|
13419
|
+
* {@link getWorkflowOutline}, keyed by workflow id. Ids the caller cannot
|
|
13420
|
+
* use, and outlines that cannot be read, are absent.
|
|
13421
|
+
*
|
|
13422
|
+
* The route accepts at most 100 ids. Callers with a longer list chunk.
|
|
13423
|
+
*/
|
|
13424
|
+
async getWorkflowsOutlineBatch(wid, workflowIds) {
|
|
13425
|
+
const params = new URLSearchParams();
|
|
13426
|
+
params.set("workflowIds", workflowIds.join(","));
|
|
13427
|
+
return this.fetch(
|
|
13428
|
+
`w/${wid}/workflows/outline/batch?${params.toString()}`
|
|
13429
|
+
);
|
|
13430
|
+
}
|
|
13175
13431
|
/** Create a new workflow in a workspace. */
|
|
13176
13432
|
async createWorkflow(wid, workflow) {
|
|
13177
13433
|
return this.fetch(`w/${wid}/workflows`, {
|
|
@@ -13910,6 +14166,17 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
13910
14166
|
async getWorkspaces(options) {
|
|
13911
14167
|
return this.fetch(`w/?${workspaceDirectoryParams(options)}`);
|
|
13912
14168
|
}
|
|
14169
|
+
/**
|
|
14170
|
+
* Page 1 of each organization's workspace directory, in one request.
|
|
14171
|
+
* Later pages stay on ``getWorkspaces({ organizationUuid, page })``.
|
|
14172
|
+
*/
|
|
14173
|
+
async getOrganizationWorkspacePages(options) {
|
|
14174
|
+
const params = new URLSearchParams();
|
|
14175
|
+
if (options.pageSize !== void 0) params.set("pageSize", String(options.pageSize));
|
|
14176
|
+
if (options.search) params.set("search", options.search);
|
|
14177
|
+
for (const uuid of options.organizationUuids) params.append("organizationUuids", uuid);
|
|
14178
|
+
return this.fetch(`w/organization-pages?${params}`);
|
|
14179
|
+
}
|
|
13913
14180
|
/** A bounded page of companion-device candidates, with admission checked per row. */
|
|
13914
14181
|
async getDeviceAdmissibleWorkspaces(options) {
|
|
13915
14182
|
const params = workspaceDirectoryParams(options);
|
|
@@ -15127,6 +15394,19 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15127
15394
|
});
|
|
15128
15395
|
}
|
|
15129
15396
|
};
|
|
15397
|
+
DataReportsApi = class extends BaseApiClient {
|
|
15398
|
+
/**
|
|
15399
|
+
* Run a Form Reports report, saved or not, with the given parameter values.
|
|
15400
|
+
* The result is what the Agent would get: record rows or aggregate groups
|
|
15401
|
+
* within the tool's row and group caps, plus the text sent to the Agent.
|
|
15402
|
+
*/
|
|
15403
|
+
async previewDataReport(wid, request) {
|
|
15404
|
+
return this.fetch(`w/${wid}/data-reports/preview`, {
|
|
15405
|
+
method: "POST",
|
|
15406
|
+
body: JSON.stringify(request)
|
|
15407
|
+
});
|
|
15408
|
+
}
|
|
15409
|
+
};
|
|
15130
15410
|
ProjectsApi = class extends BaseApiClient {
|
|
15131
15411
|
/** List projects (README frontmatter summaries). */
|
|
15132
15412
|
async getProjects(wid, options = {}) {
|
|
@@ -15315,6 +15595,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15315
15595
|
"configureHubspot",
|
|
15316
15596
|
"configureMondayConnection",
|
|
15317
15597
|
"configureSalesforce",
|
|
15598
|
+
"configureZendeskConnection",
|
|
15318
15599
|
"convertEmail",
|
|
15319
15600
|
"convertFile",
|
|
15320
15601
|
"createAbility",
|
|
@@ -15511,6 +15792,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15511
15792
|
"fhirGetCsvImportSettings",
|
|
15512
15793
|
"fhirGetEncounterSyncRuns",
|
|
15513
15794
|
"fhirGetEncounterSyncStatus",
|
|
15795
|
+
"fhirGetOnboardingImportStatus",
|
|
15514
15796
|
"fhirImportPatient",
|
|
15515
15797
|
"fhirLinkMember",
|
|
15516
15798
|
"fhirListLinkedMembers",
|
|
@@ -15519,6 +15801,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15519
15801
|
"fhirSearchLocations",
|
|
15520
15802
|
"fhirSearchPatients",
|
|
15521
15803
|
"fhirSearchPractitioners",
|
|
15804
|
+
"fhirStartOnboardingImport",
|
|
15522
15805
|
"fhirSyncMember",
|
|
15523
15806
|
"fhirUnlinkMember",
|
|
15524
15807
|
"fhirUpdateCsvImportSettings",
|
|
@@ -15675,6 +15958,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15675
15958
|
"importSiteSourceZip",
|
|
15676
15959
|
"installDocumoFax",
|
|
15677
15960
|
"listChatRecordings",
|
|
15961
|
+
"previewDataReport",
|
|
15678
15962
|
"previewQuery",
|
|
15679
15963
|
"publishSiteSource",
|
|
15680
15964
|
"publishDataTypeDraft",
|
|
@@ -15698,6 +15982,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15698
15982
|
"getFiles",
|
|
15699
15983
|
"getFirstRunState",
|
|
15700
15984
|
"getFolder",
|
|
15985
|
+
"getFolderChildren",
|
|
15701
15986
|
"getFolderMemberAccess",
|
|
15702
15987
|
"getFolderSharing",
|
|
15703
15988
|
"getFolders",
|
|
@@ -15884,6 +16169,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
15884
16169
|
"getWorkflowTemplates",
|
|
15885
16170
|
"getWorkflows",
|
|
15886
16171
|
"getWorkflowsActivityBatch",
|
|
16172
|
+
"getWorkflowsOutlineBatch",
|
|
15887
16173
|
"getWorkspace",
|
|
15888
16174
|
"getWorkspaceActivityCounts",
|
|
15889
16175
|
"getWorkspaceBuilder",
|
|
@@ -16418,6 +16704,8 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16418
16704
|
validateQuery;
|
|
16419
16705
|
previewQuery;
|
|
16420
16706
|
runQuery;
|
|
16707
|
+
// Form Reports
|
|
16708
|
+
previewDataReport;
|
|
16421
16709
|
listPersonas;
|
|
16422
16710
|
getPersona;
|
|
16423
16711
|
createPersona;
|
|
@@ -16602,6 +16890,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16602
16890
|
inspectPrompt;
|
|
16603
16891
|
// Workspaces API
|
|
16604
16892
|
getWorkspaces;
|
|
16893
|
+
getOrganizationWorkspacePages;
|
|
16605
16894
|
getDeviceAdmissibleWorkspaces;
|
|
16606
16895
|
getPublicWorkspaces;
|
|
16607
16896
|
getWorkspace;
|
|
@@ -16688,6 +16977,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16688
16977
|
getVoiceTrustProducts;
|
|
16689
16978
|
syncVoiceTrustProducts;
|
|
16690
16979
|
createOrganizationWorkspace;
|
|
16980
|
+
getOrganizationWorkspaces;
|
|
16691
16981
|
getOrganizationWorkspace;
|
|
16692
16982
|
updateOrganizationWorkspace;
|
|
16693
16983
|
getOrgBillingCustomer;
|
|
@@ -16697,7 +16987,20 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16697
16987
|
updateOrganizationMember;
|
|
16698
16988
|
listOrgWebhookEndpoints;
|
|
16699
16989
|
getOrgWebhookEndpoint;
|
|
16990
|
+
createOrgWebhookEndpoint;
|
|
16700
16991
|
updateOrgWebhookEndpoint;
|
|
16992
|
+
listOrgWebhookEndpointDeliveries;
|
|
16993
|
+
replayOrgWebhookDelivery;
|
|
16994
|
+
discardPendingOrgWebhookDeliveries;
|
|
16995
|
+
getOrgWebhookEndpointCoverage;
|
|
16996
|
+
testOrgWebhookEndpoint;
|
|
16997
|
+
listWorkspaceLabels;
|
|
16998
|
+
createWorkspaceLabel;
|
|
16999
|
+
updateWorkspaceLabel;
|
|
17000
|
+
deleteWorkspaceLabel;
|
|
17001
|
+
getWorkspaceLabels;
|
|
17002
|
+
setWorkspaceLabels;
|
|
17003
|
+
previewWorkspaceScope;
|
|
16701
17004
|
getVapidPublicKey;
|
|
16702
17005
|
registerPushSubscription;
|
|
16703
17006
|
unregisterPushSubscription;
|
|
@@ -16838,6 +17141,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16838
17141
|
convertFile;
|
|
16839
17142
|
generateFileUploadUrl;
|
|
16840
17143
|
getFolders;
|
|
17144
|
+
getFolderChildren;
|
|
16841
17145
|
getFolder;
|
|
16842
17146
|
createFolder;
|
|
16843
17147
|
updateFolder;
|
|
@@ -16895,6 +17199,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
16895
17199
|
getWorkflowsActivityBatch;
|
|
16896
17200
|
getWorkflowDiagram;
|
|
16897
17201
|
getWorkflowOutline;
|
|
17202
|
+
getWorkflowsOutlineBatch;
|
|
16898
17203
|
createWorkflow;
|
|
16899
17204
|
updateWorkflow;
|
|
16900
17205
|
getWorkflowDeletionPreview;
|
|
@@ -17107,6 +17412,12 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
17107
17412
|
deleteInquiry;
|
|
17108
17413
|
exportInquiriesCsv;
|
|
17109
17414
|
authorize;
|
|
17415
|
+
denyAuthorization;
|
|
17416
|
+
getOAuthConsentClient;
|
|
17417
|
+
getMcpConsentTargets;
|
|
17418
|
+
listMcpGrants;
|
|
17419
|
+
narrowMcpGrant;
|
|
17420
|
+
revokeMcpGrant;
|
|
17110
17421
|
exchangeOAuthToken;
|
|
17111
17422
|
getAvailableScopes;
|
|
17112
17423
|
getOAuthConnectionStatus;
|
|
@@ -17208,6 +17519,8 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
17208
17519
|
fhirGetEncounterSyncRuns;
|
|
17209
17520
|
fhirRefreshEncounterPatient;
|
|
17210
17521
|
fhirBackfillEncounterSync;
|
|
17522
|
+
fhirStartOnboardingImport;
|
|
17523
|
+
fhirGetOnboardingImportStatus;
|
|
17211
17524
|
// Healthie API
|
|
17212
17525
|
getDocumoFaxStatus;
|
|
17213
17526
|
getDocumoFaxSetup;
|
|
@@ -17300,6 +17613,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
17300
17613
|
listAvailableAppConnections;
|
|
17301
17614
|
listAppConnections;
|
|
17302
17615
|
enablePlatformApp;
|
|
17616
|
+
configureZendeskConnection;
|
|
17303
17617
|
getPlatformApp;
|
|
17304
17618
|
updatePlatformApp;
|
|
17305
17619
|
deletePlatformApp;
|
|
@@ -17380,6 +17694,7 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
17380
17694
|
bindPersonasMethods(this, apis.personas);
|
|
17381
17695
|
bindMetricsMethods(this, apis.metrics);
|
|
17382
17696
|
bindQueriesMethods(this, apis.queries);
|
|
17697
|
+
bindDataReportsMethods(this, apis.dataReports);
|
|
17383
17698
|
bindDashboardsMethods(this, apis.dashboards);
|
|
17384
17699
|
bindActivityMethods(this, apis.activity);
|
|
17385
17700
|
bindMotdMethods(this, apis.motd);
|
|
@@ -17559,9 +17874,9 @@ var init_chunk_JRK77RT4 = __esm({
|
|
|
17559
17874
|
}
|
|
17560
17875
|
});
|
|
17561
17876
|
|
|
17562
|
-
// ../sdk/dist/chunk-
|
|
17563
|
-
var
|
|
17564
|
-
"../sdk/dist/chunk-
|
|
17877
|
+
// ../sdk/dist/chunk-HXVJF54M.js
|
|
17878
|
+
var init_chunk_HXVJF54M = __esm({
|
|
17879
|
+
"../sdk/dist/chunk-HXVJF54M.js"() {
|
|
17565
17880
|
}
|
|
17566
17881
|
});
|
|
17567
17882
|
|
|
@@ -17616,8 +17931,8 @@ var init_chunk_6KPGCPGW = __esm({
|
|
|
17616
17931
|
var SEARCHABLE_EVENT_RULE_SOURCE_FIELDS, ActivityEventType, EntityKind;
|
|
17617
17932
|
var init_dist = __esm({
|
|
17618
17933
|
"../sdk/dist/index.js"() {
|
|
17619
|
-
|
|
17620
|
-
|
|
17934
|
+
init_chunk_BF4MOZZO();
|
|
17935
|
+
init_chunk_HXVJF54M();
|
|
17621
17936
|
init_chunk_6KPGCPGW();
|
|
17622
17937
|
init_chunk_GCN4OMYU();
|
|
17623
17938
|
SEARCHABLE_EVENT_RULE_SOURCE_FIELDS = [
|
|
@@ -17703,6 +18018,7 @@ var init_dist = __esm({
|
|
|
17703
18018
|
escalation: "escalation",
|
|
17704
18019
|
inbox: "inbox",
|
|
17705
18020
|
phone_number: "phone_number",
|
|
18021
|
+
recording: "recording",
|
|
17706
18022
|
voicemail: "voicemail",
|
|
17707
18023
|
domain: "domain",
|
|
17708
18024
|
import: "import",
|
|
@@ -18904,7 +19220,7 @@ function readBlockScalar(state, parentIndent, props) {
|
|
|
18904
19220
|
state.position = linePosition + column;
|
|
18905
19221
|
throwError(state, "tab characters must not be used in indentation");
|
|
18906
19222
|
}
|
|
18907
|
-
if (column < maxLeadingIndent) {
|
|
19223
|
+
if (column >= parentIndent && column < maxLeadingIndent) {
|
|
18908
19224
|
state.position = linePosition + column;
|
|
18909
19225
|
throwError(state, "bad indentation of a mapping entry");
|
|
18910
19226
|
}
|
|
@@ -19114,13 +19430,16 @@ function readBlockMapping(state, nodeIndent, flowIndent, props) {
|
|
|
19114
19430
|
ch = state.input.charCodeAt(++state.position);
|
|
19115
19431
|
if (!isWsOrEolOrEnd(ch)) throwError(state, "a whitespace character is expected after the key-value separator within a block mapping");
|
|
19116
19432
|
if (!mappingOpened) {
|
|
19117
|
-
|
|
19118
|
-
|
|
19433
|
+
state.events.splice(beforeKey.eventsLength, 0, {
|
|
19434
|
+
type: EVENT_ID.MAPPING,
|
|
19435
|
+
start: beforeKey.position,
|
|
19436
|
+
anchorStart: props.anchorStart,
|
|
19437
|
+
anchorEnd: props.anchorEnd,
|
|
19438
|
+
tagStart: props.tagStart,
|
|
19439
|
+
tagEnd: props.tagEnd,
|
|
19440
|
+
style: COLLECTION_STYLE.BLOCK
|
|
19441
|
+
});
|
|
19119
19442
|
mappingOpened = true;
|
|
19120
|
-
parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true);
|
|
19121
|
-
ch = state.input.charCodeAt(state.position);
|
|
19122
|
-
while (isWhiteSpace(ch)) ch = state.input.charCodeAt(++state.position);
|
|
19123
|
-
state.position++;
|
|
19124
19443
|
}
|
|
19125
19444
|
detected = true;
|
|
19126
19445
|
atExplicitKey = false;
|
|
@@ -20379,6 +20698,1650 @@ var init_config = __esm({
|
|
|
20379
20698
|
};
|
|
20380
20699
|
}
|
|
20381
20700
|
});
|
|
20701
|
+
|
|
20702
|
+
// ../../node_modules/graceful-fs/polyfills.js
|
|
20703
|
+
var require_polyfills = __commonJS({
|
|
20704
|
+
"../../node_modules/graceful-fs/polyfills.js"(exports$1, module) {
|
|
20705
|
+
var constants = __require("constants");
|
|
20706
|
+
var origCwd = process.cwd;
|
|
20707
|
+
var cwd = null;
|
|
20708
|
+
var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform;
|
|
20709
|
+
process.cwd = function() {
|
|
20710
|
+
if (!cwd)
|
|
20711
|
+
cwd = origCwd.call(process);
|
|
20712
|
+
return cwd;
|
|
20713
|
+
};
|
|
20714
|
+
try {
|
|
20715
|
+
process.cwd();
|
|
20716
|
+
} catch (er) {
|
|
20717
|
+
}
|
|
20718
|
+
if (typeof process.chdir === "function") {
|
|
20719
|
+
chdir = process.chdir;
|
|
20720
|
+
process.chdir = function(d) {
|
|
20721
|
+
cwd = null;
|
|
20722
|
+
chdir.call(process, d);
|
|
20723
|
+
};
|
|
20724
|
+
if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir);
|
|
20725
|
+
}
|
|
20726
|
+
var chdir;
|
|
20727
|
+
module.exports = patch;
|
|
20728
|
+
function patch(fs3) {
|
|
20729
|
+
if (constants.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
|
|
20730
|
+
patchLchmod(fs3);
|
|
20731
|
+
}
|
|
20732
|
+
if (!fs3.lutimes) {
|
|
20733
|
+
patchLutimes(fs3);
|
|
20734
|
+
}
|
|
20735
|
+
fs3.chown = chownFix(fs3.chown);
|
|
20736
|
+
fs3.fchown = chownFix(fs3.fchown);
|
|
20737
|
+
fs3.lchown = chownFix(fs3.lchown);
|
|
20738
|
+
fs3.chmod = chmodFix(fs3.chmod);
|
|
20739
|
+
fs3.fchmod = chmodFix(fs3.fchmod);
|
|
20740
|
+
fs3.lchmod = chmodFix(fs3.lchmod);
|
|
20741
|
+
fs3.chownSync = chownFixSync(fs3.chownSync);
|
|
20742
|
+
fs3.fchownSync = chownFixSync(fs3.fchownSync);
|
|
20743
|
+
fs3.lchownSync = chownFixSync(fs3.lchownSync);
|
|
20744
|
+
fs3.chmodSync = chmodFixSync(fs3.chmodSync);
|
|
20745
|
+
fs3.fchmodSync = chmodFixSync(fs3.fchmodSync);
|
|
20746
|
+
fs3.lchmodSync = chmodFixSync(fs3.lchmodSync);
|
|
20747
|
+
fs3.stat = statFix(fs3.stat);
|
|
20748
|
+
fs3.fstat = statFix(fs3.fstat);
|
|
20749
|
+
fs3.lstat = statFix(fs3.lstat);
|
|
20750
|
+
fs3.statSync = statFixSync(fs3.statSync);
|
|
20751
|
+
fs3.fstatSync = statFixSync(fs3.fstatSync);
|
|
20752
|
+
fs3.lstatSync = statFixSync(fs3.lstatSync);
|
|
20753
|
+
if (fs3.chmod && !fs3.lchmod) {
|
|
20754
|
+
fs3.lchmod = function(path4, mode, cb) {
|
|
20755
|
+
if (cb) process.nextTick(cb);
|
|
20756
|
+
};
|
|
20757
|
+
fs3.lchmodSync = function() {
|
|
20758
|
+
};
|
|
20759
|
+
}
|
|
20760
|
+
if (fs3.chown && !fs3.lchown) {
|
|
20761
|
+
fs3.lchown = function(path4, uid, gid, cb) {
|
|
20762
|
+
if (cb) process.nextTick(cb);
|
|
20763
|
+
};
|
|
20764
|
+
fs3.lchownSync = function() {
|
|
20765
|
+
};
|
|
20766
|
+
}
|
|
20767
|
+
if (platform === "win32") {
|
|
20768
|
+
fs3.rename = typeof fs3.rename !== "function" ? fs3.rename : (function(fs$rename) {
|
|
20769
|
+
function rename(from, to, cb) {
|
|
20770
|
+
var start = Date.now();
|
|
20771
|
+
var backoff = 0;
|
|
20772
|
+
fs$rename(from, to, function CB(er) {
|
|
20773
|
+
if (er && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY") && Date.now() - start < 6e4) {
|
|
20774
|
+
setTimeout(function() {
|
|
20775
|
+
fs3.stat(to, function(stater, st) {
|
|
20776
|
+
if (stater && stater.code === "ENOENT")
|
|
20777
|
+
fs$rename(from, to, CB);
|
|
20778
|
+
else
|
|
20779
|
+
cb(er);
|
|
20780
|
+
});
|
|
20781
|
+
}, backoff);
|
|
20782
|
+
if (backoff < 100)
|
|
20783
|
+
backoff += 10;
|
|
20784
|
+
return;
|
|
20785
|
+
}
|
|
20786
|
+
if (cb) cb(er);
|
|
20787
|
+
});
|
|
20788
|
+
}
|
|
20789
|
+
if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename);
|
|
20790
|
+
return rename;
|
|
20791
|
+
})(fs3.rename);
|
|
20792
|
+
}
|
|
20793
|
+
fs3.read = typeof fs3.read !== "function" ? fs3.read : (function(fs$read) {
|
|
20794
|
+
function read(fd, buffer, offset, length, position, callback_) {
|
|
20795
|
+
var callback;
|
|
20796
|
+
if (callback_ && typeof callback_ === "function") {
|
|
20797
|
+
var eagCounter = 0;
|
|
20798
|
+
callback = function(er, _, __) {
|
|
20799
|
+
if (er && er.code === "EAGAIN" && eagCounter < 10) {
|
|
20800
|
+
eagCounter++;
|
|
20801
|
+
return fs$read.call(fs3, fd, buffer, offset, length, position, callback);
|
|
20802
|
+
}
|
|
20803
|
+
callback_.apply(this, arguments);
|
|
20804
|
+
};
|
|
20805
|
+
}
|
|
20806
|
+
return fs$read.call(fs3, fd, buffer, offset, length, position, callback);
|
|
20807
|
+
}
|
|
20808
|
+
if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read);
|
|
20809
|
+
return read;
|
|
20810
|
+
})(fs3.read);
|
|
20811
|
+
fs3.readSync = typeof fs3.readSync !== "function" ? fs3.readSync : /* @__PURE__ */ (function(fs$readSync) {
|
|
20812
|
+
return function(fd, buffer, offset, length, position) {
|
|
20813
|
+
var eagCounter = 0;
|
|
20814
|
+
while (true) {
|
|
20815
|
+
try {
|
|
20816
|
+
return fs$readSync.call(fs3, fd, buffer, offset, length, position);
|
|
20817
|
+
} catch (er) {
|
|
20818
|
+
if (er.code === "EAGAIN" && eagCounter < 10) {
|
|
20819
|
+
eagCounter++;
|
|
20820
|
+
continue;
|
|
20821
|
+
}
|
|
20822
|
+
throw er;
|
|
20823
|
+
}
|
|
20824
|
+
}
|
|
20825
|
+
};
|
|
20826
|
+
})(fs3.readSync);
|
|
20827
|
+
function patchLchmod(fs4) {
|
|
20828
|
+
fs4.lchmod = function(path4, mode, callback) {
|
|
20829
|
+
fs4.open(
|
|
20830
|
+
path4,
|
|
20831
|
+
constants.O_WRONLY | constants.O_SYMLINK,
|
|
20832
|
+
mode,
|
|
20833
|
+
function(err, fd) {
|
|
20834
|
+
if (err) {
|
|
20835
|
+
if (callback) callback(err);
|
|
20836
|
+
return;
|
|
20837
|
+
}
|
|
20838
|
+
fs4.fchmod(fd, mode, function(err2) {
|
|
20839
|
+
fs4.close(fd, function(err22) {
|
|
20840
|
+
if (callback) callback(err2 || err22);
|
|
20841
|
+
});
|
|
20842
|
+
});
|
|
20843
|
+
}
|
|
20844
|
+
);
|
|
20845
|
+
};
|
|
20846
|
+
fs4.lchmodSync = function(path4, mode) {
|
|
20847
|
+
var fd = fs4.openSync(path4, constants.O_WRONLY | constants.O_SYMLINK, mode);
|
|
20848
|
+
var threw = true;
|
|
20849
|
+
var ret;
|
|
20850
|
+
try {
|
|
20851
|
+
ret = fs4.fchmodSync(fd, mode);
|
|
20852
|
+
threw = false;
|
|
20853
|
+
} finally {
|
|
20854
|
+
if (threw) {
|
|
20855
|
+
try {
|
|
20856
|
+
fs4.closeSync(fd);
|
|
20857
|
+
} catch (er) {
|
|
20858
|
+
}
|
|
20859
|
+
} else {
|
|
20860
|
+
fs4.closeSync(fd);
|
|
20861
|
+
}
|
|
20862
|
+
}
|
|
20863
|
+
return ret;
|
|
20864
|
+
};
|
|
20865
|
+
}
|
|
20866
|
+
function patchLutimes(fs4) {
|
|
20867
|
+
if (constants.hasOwnProperty("O_SYMLINK") && fs4.futimes) {
|
|
20868
|
+
fs4.lutimes = function(path4, at, mt, cb) {
|
|
20869
|
+
fs4.open(path4, constants.O_SYMLINK, function(er, fd) {
|
|
20870
|
+
if (er) {
|
|
20871
|
+
if (cb) cb(er);
|
|
20872
|
+
return;
|
|
20873
|
+
}
|
|
20874
|
+
fs4.futimes(fd, at, mt, function(er2) {
|
|
20875
|
+
fs4.close(fd, function(er22) {
|
|
20876
|
+
if (cb) cb(er2 || er22);
|
|
20877
|
+
});
|
|
20878
|
+
});
|
|
20879
|
+
});
|
|
20880
|
+
};
|
|
20881
|
+
fs4.lutimesSync = function(path4, at, mt) {
|
|
20882
|
+
var fd = fs4.openSync(path4, constants.O_SYMLINK);
|
|
20883
|
+
var ret;
|
|
20884
|
+
var threw = true;
|
|
20885
|
+
try {
|
|
20886
|
+
ret = fs4.futimesSync(fd, at, mt);
|
|
20887
|
+
threw = false;
|
|
20888
|
+
} finally {
|
|
20889
|
+
if (threw) {
|
|
20890
|
+
try {
|
|
20891
|
+
fs4.closeSync(fd);
|
|
20892
|
+
} catch (er) {
|
|
20893
|
+
}
|
|
20894
|
+
} else {
|
|
20895
|
+
fs4.closeSync(fd);
|
|
20896
|
+
}
|
|
20897
|
+
}
|
|
20898
|
+
return ret;
|
|
20899
|
+
};
|
|
20900
|
+
} else if (fs4.futimes) {
|
|
20901
|
+
fs4.lutimes = function(_a, _b, _c, cb) {
|
|
20902
|
+
if (cb) process.nextTick(cb);
|
|
20903
|
+
};
|
|
20904
|
+
fs4.lutimesSync = function() {
|
|
20905
|
+
};
|
|
20906
|
+
}
|
|
20907
|
+
}
|
|
20908
|
+
function chmodFix(orig) {
|
|
20909
|
+
if (!orig) return orig;
|
|
20910
|
+
return function(target, mode, cb) {
|
|
20911
|
+
return orig.call(fs3, target, mode, function(er) {
|
|
20912
|
+
if (chownErOk(er)) er = null;
|
|
20913
|
+
if (cb) cb.apply(this, arguments);
|
|
20914
|
+
});
|
|
20915
|
+
};
|
|
20916
|
+
}
|
|
20917
|
+
function chmodFixSync(orig) {
|
|
20918
|
+
if (!orig) return orig;
|
|
20919
|
+
return function(target, mode) {
|
|
20920
|
+
try {
|
|
20921
|
+
return orig.call(fs3, target, mode);
|
|
20922
|
+
} catch (er) {
|
|
20923
|
+
if (!chownErOk(er)) throw er;
|
|
20924
|
+
}
|
|
20925
|
+
};
|
|
20926
|
+
}
|
|
20927
|
+
function chownFix(orig) {
|
|
20928
|
+
if (!orig) return orig;
|
|
20929
|
+
return function(target, uid, gid, cb) {
|
|
20930
|
+
return orig.call(fs3, target, uid, gid, function(er) {
|
|
20931
|
+
if (chownErOk(er)) er = null;
|
|
20932
|
+
if (cb) cb.apply(this, arguments);
|
|
20933
|
+
});
|
|
20934
|
+
};
|
|
20935
|
+
}
|
|
20936
|
+
function chownFixSync(orig) {
|
|
20937
|
+
if (!orig) return orig;
|
|
20938
|
+
return function(target, uid, gid) {
|
|
20939
|
+
try {
|
|
20940
|
+
return orig.call(fs3, target, uid, gid);
|
|
20941
|
+
} catch (er) {
|
|
20942
|
+
if (!chownErOk(er)) throw er;
|
|
20943
|
+
}
|
|
20944
|
+
};
|
|
20945
|
+
}
|
|
20946
|
+
function statFix(orig) {
|
|
20947
|
+
if (!orig) return orig;
|
|
20948
|
+
return function(target, options, cb) {
|
|
20949
|
+
if (typeof options === "function") {
|
|
20950
|
+
cb = options;
|
|
20951
|
+
options = null;
|
|
20952
|
+
}
|
|
20953
|
+
function callback(er, stats) {
|
|
20954
|
+
if (stats) {
|
|
20955
|
+
if (stats.uid < 0) stats.uid += 4294967296;
|
|
20956
|
+
if (stats.gid < 0) stats.gid += 4294967296;
|
|
20957
|
+
}
|
|
20958
|
+
if (cb) cb.apply(this, arguments);
|
|
20959
|
+
}
|
|
20960
|
+
return options ? orig.call(fs3, target, options, callback) : orig.call(fs3, target, callback);
|
|
20961
|
+
};
|
|
20962
|
+
}
|
|
20963
|
+
function statFixSync(orig) {
|
|
20964
|
+
if (!orig) return orig;
|
|
20965
|
+
return function(target, options) {
|
|
20966
|
+
var stats = options ? orig.call(fs3, target, options) : orig.call(fs3, target);
|
|
20967
|
+
if (stats) {
|
|
20968
|
+
if (stats.uid < 0) stats.uid += 4294967296;
|
|
20969
|
+
if (stats.gid < 0) stats.gid += 4294967296;
|
|
20970
|
+
}
|
|
20971
|
+
return stats;
|
|
20972
|
+
};
|
|
20973
|
+
}
|
|
20974
|
+
function chownErOk(er) {
|
|
20975
|
+
if (!er)
|
|
20976
|
+
return true;
|
|
20977
|
+
if (er.code === "ENOSYS")
|
|
20978
|
+
return true;
|
|
20979
|
+
var nonroot = !process.getuid || process.getuid() !== 0;
|
|
20980
|
+
if (nonroot) {
|
|
20981
|
+
if (er.code === "EINVAL" || er.code === "EPERM")
|
|
20982
|
+
return true;
|
|
20983
|
+
}
|
|
20984
|
+
return false;
|
|
20985
|
+
}
|
|
20986
|
+
}
|
|
20987
|
+
}
|
|
20988
|
+
});
|
|
20989
|
+
|
|
20990
|
+
// ../../node_modules/graceful-fs/legacy-streams.js
|
|
20991
|
+
var require_legacy_streams = __commonJS({
|
|
20992
|
+
"../../node_modules/graceful-fs/legacy-streams.js"(exports$1, module) {
|
|
20993
|
+
var Stream = __require("stream").Stream;
|
|
20994
|
+
module.exports = legacy;
|
|
20995
|
+
function legacy(fs3) {
|
|
20996
|
+
return {
|
|
20997
|
+
ReadStream,
|
|
20998
|
+
WriteStream
|
|
20999
|
+
};
|
|
21000
|
+
function ReadStream(path4, options) {
|
|
21001
|
+
if (!(this instanceof ReadStream)) return new ReadStream(path4, options);
|
|
21002
|
+
Stream.call(this);
|
|
21003
|
+
var self = this;
|
|
21004
|
+
this.path = path4;
|
|
21005
|
+
this.fd = null;
|
|
21006
|
+
this.readable = true;
|
|
21007
|
+
this.paused = false;
|
|
21008
|
+
this.flags = "r";
|
|
21009
|
+
this.mode = 438;
|
|
21010
|
+
this.bufferSize = 64 * 1024;
|
|
21011
|
+
options = options || {};
|
|
21012
|
+
var keys = Object.keys(options);
|
|
21013
|
+
for (var index = 0, length = keys.length; index < length; index++) {
|
|
21014
|
+
var key = keys[index];
|
|
21015
|
+
this[key] = options[key];
|
|
21016
|
+
}
|
|
21017
|
+
if (this.encoding) this.setEncoding(this.encoding);
|
|
21018
|
+
if (this.start !== void 0) {
|
|
21019
|
+
if ("number" !== typeof this.start) {
|
|
21020
|
+
throw TypeError("start must be a Number");
|
|
21021
|
+
}
|
|
21022
|
+
if (this.end === void 0) {
|
|
21023
|
+
this.end = Infinity;
|
|
21024
|
+
} else if ("number" !== typeof this.end) {
|
|
21025
|
+
throw TypeError("end must be a Number");
|
|
21026
|
+
}
|
|
21027
|
+
if (this.start > this.end) {
|
|
21028
|
+
throw new Error("start must be <= end");
|
|
21029
|
+
}
|
|
21030
|
+
this.pos = this.start;
|
|
21031
|
+
}
|
|
21032
|
+
if (this.fd !== null) {
|
|
21033
|
+
process.nextTick(function() {
|
|
21034
|
+
self._read();
|
|
21035
|
+
});
|
|
21036
|
+
return;
|
|
21037
|
+
}
|
|
21038
|
+
fs3.open(this.path, this.flags, this.mode, function(err, fd) {
|
|
21039
|
+
if (err) {
|
|
21040
|
+
self.emit("error", err);
|
|
21041
|
+
self.readable = false;
|
|
21042
|
+
return;
|
|
21043
|
+
}
|
|
21044
|
+
self.fd = fd;
|
|
21045
|
+
self.emit("open", fd);
|
|
21046
|
+
self._read();
|
|
21047
|
+
});
|
|
21048
|
+
}
|
|
21049
|
+
function WriteStream(path4, options) {
|
|
21050
|
+
if (!(this instanceof WriteStream)) return new WriteStream(path4, options);
|
|
21051
|
+
Stream.call(this);
|
|
21052
|
+
this.path = path4;
|
|
21053
|
+
this.fd = null;
|
|
21054
|
+
this.writable = true;
|
|
21055
|
+
this.flags = "w";
|
|
21056
|
+
this.encoding = "binary";
|
|
21057
|
+
this.mode = 438;
|
|
21058
|
+
this.bytesWritten = 0;
|
|
21059
|
+
options = options || {};
|
|
21060
|
+
var keys = Object.keys(options);
|
|
21061
|
+
for (var index = 0, length = keys.length; index < length; index++) {
|
|
21062
|
+
var key = keys[index];
|
|
21063
|
+
this[key] = options[key];
|
|
21064
|
+
}
|
|
21065
|
+
if (this.start !== void 0) {
|
|
21066
|
+
if ("number" !== typeof this.start) {
|
|
21067
|
+
throw TypeError("start must be a Number");
|
|
21068
|
+
}
|
|
21069
|
+
if (this.start < 0) {
|
|
21070
|
+
throw new Error("start must be >= zero");
|
|
21071
|
+
}
|
|
21072
|
+
this.pos = this.start;
|
|
21073
|
+
}
|
|
21074
|
+
this.busy = false;
|
|
21075
|
+
this._queue = [];
|
|
21076
|
+
if (this.fd === null) {
|
|
21077
|
+
this._open = fs3.open;
|
|
21078
|
+
this._queue.push([this._open, this.path, this.flags, this.mode, void 0]);
|
|
21079
|
+
this.flush();
|
|
21080
|
+
}
|
|
21081
|
+
}
|
|
21082
|
+
}
|
|
21083
|
+
}
|
|
21084
|
+
});
|
|
21085
|
+
|
|
21086
|
+
// ../../node_modules/graceful-fs/clone.js
|
|
21087
|
+
var require_clone = __commonJS({
|
|
21088
|
+
"../../node_modules/graceful-fs/clone.js"(exports$1, module) {
|
|
21089
|
+
module.exports = clone;
|
|
21090
|
+
var getPrototypeOf = Object.getPrototypeOf || function(obj) {
|
|
21091
|
+
return obj.__proto__;
|
|
21092
|
+
};
|
|
21093
|
+
function clone(obj) {
|
|
21094
|
+
if (obj === null || typeof obj !== "object")
|
|
21095
|
+
return obj;
|
|
21096
|
+
if (obj instanceof Object)
|
|
21097
|
+
var copy = { __proto__: getPrototypeOf(obj) };
|
|
21098
|
+
else
|
|
21099
|
+
var copy = /* @__PURE__ */ Object.create(null);
|
|
21100
|
+
Object.getOwnPropertyNames(obj).forEach(function(key) {
|
|
21101
|
+
Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key));
|
|
21102
|
+
});
|
|
21103
|
+
return copy;
|
|
21104
|
+
}
|
|
21105
|
+
}
|
|
21106
|
+
});
|
|
21107
|
+
|
|
21108
|
+
// ../../node_modules/graceful-fs/graceful-fs.js
|
|
21109
|
+
var require_graceful_fs = __commonJS({
|
|
21110
|
+
"../../node_modules/graceful-fs/graceful-fs.js"(exports$1, module) {
|
|
21111
|
+
var fs3 = __require("fs");
|
|
21112
|
+
var polyfills = require_polyfills();
|
|
21113
|
+
var legacy = require_legacy_streams();
|
|
21114
|
+
var clone = require_clone();
|
|
21115
|
+
var util = __require("util");
|
|
21116
|
+
var gracefulQueue;
|
|
21117
|
+
var previousSymbol;
|
|
21118
|
+
if (typeof Symbol === "function" && typeof Symbol.for === "function") {
|
|
21119
|
+
gracefulQueue = /* @__PURE__ */ Symbol.for("graceful-fs.queue");
|
|
21120
|
+
previousSymbol = /* @__PURE__ */ Symbol.for("graceful-fs.previous");
|
|
21121
|
+
} else {
|
|
21122
|
+
gracefulQueue = "___graceful-fs.queue";
|
|
21123
|
+
previousSymbol = "___graceful-fs.previous";
|
|
21124
|
+
}
|
|
21125
|
+
function noop() {
|
|
21126
|
+
}
|
|
21127
|
+
function publishQueue(context, queue2) {
|
|
21128
|
+
Object.defineProperty(context, gracefulQueue, {
|
|
21129
|
+
get: function() {
|
|
21130
|
+
return queue2;
|
|
21131
|
+
}
|
|
21132
|
+
});
|
|
21133
|
+
}
|
|
21134
|
+
var debug = noop;
|
|
21135
|
+
if (util.debuglog)
|
|
21136
|
+
debug = util.debuglog("gfs4");
|
|
21137
|
+
else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
|
|
21138
|
+
debug = function() {
|
|
21139
|
+
var m = util.format.apply(util, arguments);
|
|
21140
|
+
m = "GFS4: " + m.split(/\n/).join("\nGFS4: ");
|
|
21141
|
+
console.error(m);
|
|
21142
|
+
};
|
|
21143
|
+
if (!fs3[gracefulQueue]) {
|
|
21144
|
+
queue = global[gracefulQueue] || [];
|
|
21145
|
+
publishQueue(fs3, queue);
|
|
21146
|
+
fs3.close = (function(fs$close) {
|
|
21147
|
+
function close(fd, cb) {
|
|
21148
|
+
return fs$close.call(fs3, fd, function(err) {
|
|
21149
|
+
if (!err) {
|
|
21150
|
+
resetQueue();
|
|
21151
|
+
}
|
|
21152
|
+
if (typeof cb === "function")
|
|
21153
|
+
cb.apply(this, arguments);
|
|
21154
|
+
});
|
|
21155
|
+
}
|
|
21156
|
+
Object.defineProperty(close, previousSymbol, {
|
|
21157
|
+
value: fs$close
|
|
21158
|
+
});
|
|
21159
|
+
return close;
|
|
21160
|
+
})(fs3.close);
|
|
21161
|
+
fs3.closeSync = (function(fs$closeSync) {
|
|
21162
|
+
function closeSync(fd) {
|
|
21163
|
+
fs$closeSync.apply(fs3, arguments);
|
|
21164
|
+
resetQueue();
|
|
21165
|
+
}
|
|
21166
|
+
Object.defineProperty(closeSync, previousSymbol, {
|
|
21167
|
+
value: fs$closeSync
|
|
21168
|
+
});
|
|
21169
|
+
return closeSync;
|
|
21170
|
+
})(fs3.closeSync);
|
|
21171
|
+
if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) {
|
|
21172
|
+
process.on("exit", function() {
|
|
21173
|
+
debug(fs3[gracefulQueue]);
|
|
21174
|
+
__require("assert").equal(fs3[gracefulQueue].length, 0);
|
|
21175
|
+
});
|
|
21176
|
+
}
|
|
21177
|
+
}
|
|
21178
|
+
var queue;
|
|
21179
|
+
if (!global[gracefulQueue]) {
|
|
21180
|
+
publishQueue(global, fs3[gracefulQueue]);
|
|
21181
|
+
}
|
|
21182
|
+
module.exports = patch(clone(fs3));
|
|
21183
|
+
if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs3.__patched) {
|
|
21184
|
+
module.exports = patch(fs3);
|
|
21185
|
+
fs3.__patched = true;
|
|
21186
|
+
}
|
|
21187
|
+
function patch(fs4) {
|
|
21188
|
+
polyfills(fs4);
|
|
21189
|
+
fs4.gracefulify = patch;
|
|
21190
|
+
fs4.createReadStream = createReadStream;
|
|
21191
|
+
fs4.createWriteStream = createWriteStream2;
|
|
21192
|
+
var fs$readFile = fs4.readFile;
|
|
21193
|
+
fs4.readFile = readFile3;
|
|
21194
|
+
function readFile3(path4, options, cb) {
|
|
21195
|
+
if (typeof options === "function")
|
|
21196
|
+
cb = options, options = null;
|
|
21197
|
+
return go$readFile(path4, options, cb);
|
|
21198
|
+
function go$readFile(path5, options2, cb2, startTime) {
|
|
21199
|
+
return fs$readFile(path5, options2, function(err) {
|
|
21200
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21201
|
+
enqueue([go$readFile, [path5, options2, cb2], err, startTime || Date.now(), Date.now()]);
|
|
21202
|
+
else {
|
|
21203
|
+
if (typeof cb2 === "function")
|
|
21204
|
+
cb2.apply(this, arguments);
|
|
21205
|
+
}
|
|
21206
|
+
});
|
|
21207
|
+
}
|
|
21208
|
+
}
|
|
21209
|
+
var fs$writeFile = fs4.writeFile;
|
|
21210
|
+
fs4.writeFile = writeFile2;
|
|
21211
|
+
function writeFile2(path4, data, options, cb) {
|
|
21212
|
+
if (typeof options === "function")
|
|
21213
|
+
cb = options, options = null;
|
|
21214
|
+
return go$writeFile(path4, data, options, cb);
|
|
21215
|
+
function go$writeFile(path5, data2, options2, cb2, startTime) {
|
|
21216
|
+
return fs$writeFile(path5, data2, options2, function(err) {
|
|
21217
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21218
|
+
enqueue([go$writeFile, [path5, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
|
|
21219
|
+
else {
|
|
21220
|
+
if (typeof cb2 === "function")
|
|
21221
|
+
cb2.apply(this, arguments);
|
|
21222
|
+
}
|
|
21223
|
+
});
|
|
21224
|
+
}
|
|
21225
|
+
}
|
|
21226
|
+
var fs$appendFile = fs4.appendFile;
|
|
21227
|
+
if (fs$appendFile)
|
|
21228
|
+
fs4.appendFile = appendFile;
|
|
21229
|
+
function appendFile(path4, data, options, cb) {
|
|
21230
|
+
if (typeof options === "function")
|
|
21231
|
+
cb = options, options = null;
|
|
21232
|
+
return go$appendFile(path4, data, options, cb);
|
|
21233
|
+
function go$appendFile(path5, data2, options2, cb2, startTime) {
|
|
21234
|
+
return fs$appendFile(path5, data2, options2, function(err) {
|
|
21235
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21236
|
+
enqueue([go$appendFile, [path5, data2, options2, cb2], err, startTime || Date.now(), Date.now()]);
|
|
21237
|
+
else {
|
|
21238
|
+
if (typeof cb2 === "function")
|
|
21239
|
+
cb2.apply(this, arguments);
|
|
21240
|
+
}
|
|
21241
|
+
});
|
|
21242
|
+
}
|
|
21243
|
+
}
|
|
21244
|
+
var fs$copyFile = fs4.copyFile;
|
|
21245
|
+
if (fs$copyFile)
|
|
21246
|
+
fs4.copyFile = copyFile;
|
|
21247
|
+
function copyFile(src, dest, flags, cb) {
|
|
21248
|
+
if (typeof flags === "function") {
|
|
21249
|
+
cb = flags;
|
|
21250
|
+
flags = 0;
|
|
21251
|
+
}
|
|
21252
|
+
return go$copyFile(src, dest, flags, cb);
|
|
21253
|
+
function go$copyFile(src2, dest2, flags2, cb2, startTime) {
|
|
21254
|
+
return fs$copyFile(src2, dest2, flags2, function(err) {
|
|
21255
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21256
|
+
enqueue([go$copyFile, [src2, dest2, flags2, cb2], err, startTime || Date.now(), Date.now()]);
|
|
21257
|
+
else {
|
|
21258
|
+
if (typeof cb2 === "function")
|
|
21259
|
+
cb2.apply(this, arguments);
|
|
21260
|
+
}
|
|
21261
|
+
});
|
|
21262
|
+
}
|
|
21263
|
+
}
|
|
21264
|
+
var fs$readdir = fs4.readdir;
|
|
21265
|
+
fs4.readdir = readdir;
|
|
21266
|
+
var noReaddirOptionVersions = /^v[0-5]\./;
|
|
21267
|
+
function readdir(path4, options, cb) {
|
|
21268
|
+
if (typeof options === "function")
|
|
21269
|
+
cb = options, options = null;
|
|
21270
|
+
var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path5, options2, cb2, startTime) {
|
|
21271
|
+
return fs$readdir(path5, fs$readdirCallback(
|
|
21272
|
+
path5,
|
|
21273
|
+
options2,
|
|
21274
|
+
cb2,
|
|
21275
|
+
startTime
|
|
21276
|
+
));
|
|
21277
|
+
} : function go$readdir2(path5, options2, cb2, startTime) {
|
|
21278
|
+
return fs$readdir(path5, options2, fs$readdirCallback(
|
|
21279
|
+
path5,
|
|
21280
|
+
options2,
|
|
21281
|
+
cb2,
|
|
21282
|
+
startTime
|
|
21283
|
+
));
|
|
21284
|
+
};
|
|
21285
|
+
return go$readdir(path4, options, cb);
|
|
21286
|
+
function fs$readdirCallback(path5, options2, cb2, startTime) {
|
|
21287
|
+
return function(err, files) {
|
|
21288
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21289
|
+
enqueue([
|
|
21290
|
+
go$readdir,
|
|
21291
|
+
[path5, options2, cb2],
|
|
21292
|
+
err,
|
|
21293
|
+
startTime || Date.now(),
|
|
21294
|
+
Date.now()
|
|
21295
|
+
]);
|
|
21296
|
+
else {
|
|
21297
|
+
if (files && files.sort)
|
|
21298
|
+
files.sort();
|
|
21299
|
+
if (typeof cb2 === "function")
|
|
21300
|
+
cb2.call(this, err, files);
|
|
21301
|
+
}
|
|
21302
|
+
};
|
|
21303
|
+
}
|
|
21304
|
+
}
|
|
21305
|
+
if (process.version.substr(0, 4) === "v0.8") {
|
|
21306
|
+
var legStreams = legacy(fs4);
|
|
21307
|
+
ReadStream = legStreams.ReadStream;
|
|
21308
|
+
WriteStream = legStreams.WriteStream;
|
|
21309
|
+
}
|
|
21310
|
+
var fs$ReadStream = fs4.ReadStream;
|
|
21311
|
+
if (fs$ReadStream) {
|
|
21312
|
+
ReadStream.prototype = Object.create(fs$ReadStream.prototype);
|
|
21313
|
+
ReadStream.prototype.open = ReadStream$open;
|
|
21314
|
+
}
|
|
21315
|
+
var fs$WriteStream = fs4.WriteStream;
|
|
21316
|
+
if (fs$WriteStream) {
|
|
21317
|
+
WriteStream.prototype = Object.create(fs$WriteStream.prototype);
|
|
21318
|
+
WriteStream.prototype.open = WriteStream$open;
|
|
21319
|
+
}
|
|
21320
|
+
Object.defineProperty(fs4, "ReadStream", {
|
|
21321
|
+
get: function() {
|
|
21322
|
+
return ReadStream;
|
|
21323
|
+
},
|
|
21324
|
+
set: function(val) {
|
|
21325
|
+
ReadStream = val;
|
|
21326
|
+
},
|
|
21327
|
+
enumerable: true,
|
|
21328
|
+
configurable: true
|
|
21329
|
+
});
|
|
21330
|
+
Object.defineProperty(fs4, "WriteStream", {
|
|
21331
|
+
get: function() {
|
|
21332
|
+
return WriteStream;
|
|
21333
|
+
},
|
|
21334
|
+
set: function(val) {
|
|
21335
|
+
WriteStream = val;
|
|
21336
|
+
},
|
|
21337
|
+
enumerable: true,
|
|
21338
|
+
configurable: true
|
|
21339
|
+
});
|
|
21340
|
+
var FileReadStream = ReadStream;
|
|
21341
|
+
Object.defineProperty(fs4, "FileReadStream", {
|
|
21342
|
+
get: function() {
|
|
21343
|
+
return FileReadStream;
|
|
21344
|
+
},
|
|
21345
|
+
set: function(val) {
|
|
21346
|
+
FileReadStream = val;
|
|
21347
|
+
},
|
|
21348
|
+
enumerable: true,
|
|
21349
|
+
configurable: true
|
|
21350
|
+
});
|
|
21351
|
+
var FileWriteStream = WriteStream;
|
|
21352
|
+
Object.defineProperty(fs4, "FileWriteStream", {
|
|
21353
|
+
get: function() {
|
|
21354
|
+
return FileWriteStream;
|
|
21355
|
+
},
|
|
21356
|
+
set: function(val) {
|
|
21357
|
+
FileWriteStream = val;
|
|
21358
|
+
},
|
|
21359
|
+
enumerable: true,
|
|
21360
|
+
configurable: true
|
|
21361
|
+
});
|
|
21362
|
+
function ReadStream(path4, options) {
|
|
21363
|
+
if (this instanceof ReadStream)
|
|
21364
|
+
return fs$ReadStream.apply(this, arguments), this;
|
|
21365
|
+
else
|
|
21366
|
+
return ReadStream.apply(Object.create(ReadStream.prototype), arguments);
|
|
21367
|
+
}
|
|
21368
|
+
function ReadStream$open() {
|
|
21369
|
+
var that = this;
|
|
21370
|
+
open(that.path, that.flags, that.mode, function(err, fd) {
|
|
21371
|
+
if (err) {
|
|
21372
|
+
if (that.autoClose)
|
|
21373
|
+
that.destroy();
|
|
21374
|
+
that.emit("error", err);
|
|
21375
|
+
} else {
|
|
21376
|
+
that.fd = fd;
|
|
21377
|
+
that.emit("open", fd);
|
|
21378
|
+
that.read();
|
|
21379
|
+
}
|
|
21380
|
+
});
|
|
21381
|
+
}
|
|
21382
|
+
function WriteStream(path4, options) {
|
|
21383
|
+
if (this instanceof WriteStream)
|
|
21384
|
+
return fs$WriteStream.apply(this, arguments), this;
|
|
21385
|
+
else
|
|
21386
|
+
return WriteStream.apply(Object.create(WriteStream.prototype), arguments);
|
|
21387
|
+
}
|
|
21388
|
+
function WriteStream$open() {
|
|
21389
|
+
var that = this;
|
|
21390
|
+
open(that.path, that.flags, that.mode, function(err, fd) {
|
|
21391
|
+
if (err) {
|
|
21392
|
+
that.destroy();
|
|
21393
|
+
that.emit("error", err);
|
|
21394
|
+
} else {
|
|
21395
|
+
that.fd = fd;
|
|
21396
|
+
that.emit("open", fd);
|
|
21397
|
+
}
|
|
21398
|
+
});
|
|
21399
|
+
}
|
|
21400
|
+
function createReadStream(path4, options) {
|
|
21401
|
+
return new fs4.ReadStream(path4, options);
|
|
21402
|
+
}
|
|
21403
|
+
function createWriteStream2(path4, options) {
|
|
21404
|
+
return new fs4.WriteStream(path4, options);
|
|
21405
|
+
}
|
|
21406
|
+
var fs$open = fs4.open;
|
|
21407
|
+
fs4.open = open;
|
|
21408
|
+
function open(path4, flags, mode, cb) {
|
|
21409
|
+
if (typeof mode === "function")
|
|
21410
|
+
cb = mode, mode = null;
|
|
21411
|
+
return go$open(path4, flags, mode, cb);
|
|
21412
|
+
function go$open(path5, flags2, mode2, cb2, startTime) {
|
|
21413
|
+
return fs$open(path5, flags2, mode2, function(err, fd) {
|
|
21414
|
+
if (err && (err.code === "EMFILE" || err.code === "ENFILE"))
|
|
21415
|
+
enqueue([go$open, [path5, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]);
|
|
21416
|
+
else {
|
|
21417
|
+
if (typeof cb2 === "function")
|
|
21418
|
+
cb2.apply(this, arguments);
|
|
21419
|
+
}
|
|
21420
|
+
});
|
|
21421
|
+
}
|
|
21422
|
+
}
|
|
21423
|
+
return fs4;
|
|
21424
|
+
}
|
|
21425
|
+
function enqueue(elem) {
|
|
21426
|
+
debug("ENQUEUE", elem[0].name, elem[1]);
|
|
21427
|
+
fs3[gracefulQueue].push(elem);
|
|
21428
|
+
retry();
|
|
21429
|
+
}
|
|
21430
|
+
var retryTimer;
|
|
21431
|
+
function resetQueue() {
|
|
21432
|
+
var now = Date.now();
|
|
21433
|
+
for (var i = 0; i < fs3[gracefulQueue].length; ++i) {
|
|
21434
|
+
if (fs3[gracefulQueue][i].length > 2) {
|
|
21435
|
+
fs3[gracefulQueue][i][3] = now;
|
|
21436
|
+
fs3[gracefulQueue][i][4] = now;
|
|
21437
|
+
}
|
|
21438
|
+
}
|
|
21439
|
+
retry();
|
|
21440
|
+
}
|
|
21441
|
+
function retry() {
|
|
21442
|
+
clearTimeout(retryTimer);
|
|
21443
|
+
retryTimer = void 0;
|
|
21444
|
+
if (fs3[gracefulQueue].length === 0)
|
|
21445
|
+
return;
|
|
21446
|
+
var elem = fs3[gracefulQueue].shift();
|
|
21447
|
+
var fn = elem[0];
|
|
21448
|
+
var args = elem[1];
|
|
21449
|
+
var err = elem[2];
|
|
21450
|
+
var startTime = elem[3];
|
|
21451
|
+
var lastTime = elem[4];
|
|
21452
|
+
if (startTime === void 0) {
|
|
21453
|
+
debug("RETRY", fn.name, args);
|
|
21454
|
+
fn.apply(null, args);
|
|
21455
|
+
} else if (Date.now() - startTime >= 6e4) {
|
|
21456
|
+
debug("TIMEOUT", fn.name, args);
|
|
21457
|
+
var cb = args.pop();
|
|
21458
|
+
if (typeof cb === "function")
|
|
21459
|
+
cb.call(null, err);
|
|
21460
|
+
} else {
|
|
21461
|
+
var sinceAttempt = Date.now() - lastTime;
|
|
21462
|
+
var sinceStart = Math.max(lastTime - startTime, 1);
|
|
21463
|
+
var desiredDelay = Math.min(sinceStart * 1.2, 100);
|
|
21464
|
+
if (sinceAttempt >= desiredDelay) {
|
|
21465
|
+
debug("RETRY", fn.name, args);
|
|
21466
|
+
fn.apply(null, args.concat([startTime]));
|
|
21467
|
+
} else {
|
|
21468
|
+
fs3[gracefulQueue].push(elem);
|
|
21469
|
+
}
|
|
21470
|
+
}
|
|
21471
|
+
if (retryTimer === void 0) {
|
|
21472
|
+
retryTimer = setTimeout(retry, 0);
|
|
21473
|
+
}
|
|
21474
|
+
}
|
|
21475
|
+
}
|
|
21476
|
+
});
|
|
21477
|
+
|
|
21478
|
+
// ../../node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js
|
|
21479
|
+
var require_retry_operation = __commonJS({
|
|
21480
|
+
"../../node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js"(exports$1, module) {
|
|
21481
|
+
function RetryOperation(timeouts, options) {
|
|
21482
|
+
if (typeof options === "boolean") {
|
|
21483
|
+
options = { forever: options };
|
|
21484
|
+
}
|
|
21485
|
+
this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));
|
|
21486
|
+
this._timeouts = timeouts;
|
|
21487
|
+
this._options = options || {};
|
|
21488
|
+
this._maxRetryTime = options && options.maxRetryTime || Infinity;
|
|
21489
|
+
this._fn = null;
|
|
21490
|
+
this._errors = [];
|
|
21491
|
+
this._attempts = 1;
|
|
21492
|
+
this._operationTimeout = null;
|
|
21493
|
+
this._operationTimeoutCb = null;
|
|
21494
|
+
this._timeout = null;
|
|
21495
|
+
this._operationStart = null;
|
|
21496
|
+
if (this._options.forever) {
|
|
21497
|
+
this._cachedTimeouts = this._timeouts.slice(0);
|
|
21498
|
+
}
|
|
21499
|
+
}
|
|
21500
|
+
module.exports = RetryOperation;
|
|
21501
|
+
RetryOperation.prototype.reset = function() {
|
|
21502
|
+
this._attempts = 1;
|
|
21503
|
+
this._timeouts = this._originalTimeouts;
|
|
21504
|
+
};
|
|
21505
|
+
RetryOperation.prototype.stop = function() {
|
|
21506
|
+
if (this._timeout) {
|
|
21507
|
+
clearTimeout(this._timeout);
|
|
21508
|
+
}
|
|
21509
|
+
this._timeouts = [];
|
|
21510
|
+
this._cachedTimeouts = null;
|
|
21511
|
+
};
|
|
21512
|
+
RetryOperation.prototype.retry = function(err) {
|
|
21513
|
+
if (this._timeout) {
|
|
21514
|
+
clearTimeout(this._timeout);
|
|
21515
|
+
}
|
|
21516
|
+
if (!err) {
|
|
21517
|
+
return false;
|
|
21518
|
+
}
|
|
21519
|
+
var currentTime = (/* @__PURE__ */ new Date()).getTime();
|
|
21520
|
+
if (err && currentTime - this._operationStart >= this._maxRetryTime) {
|
|
21521
|
+
this._errors.unshift(new Error("RetryOperation timeout occurred"));
|
|
21522
|
+
return false;
|
|
21523
|
+
}
|
|
21524
|
+
this._errors.push(err);
|
|
21525
|
+
var timeout = this._timeouts.shift();
|
|
21526
|
+
if (timeout === void 0) {
|
|
21527
|
+
if (this._cachedTimeouts) {
|
|
21528
|
+
this._errors.splice(this._errors.length - 1, this._errors.length);
|
|
21529
|
+
this._timeouts = this._cachedTimeouts.slice(0);
|
|
21530
|
+
timeout = this._timeouts.shift();
|
|
21531
|
+
} else {
|
|
21532
|
+
return false;
|
|
21533
|
+
}
|
|
21534
|
+
}
|
|
21535
|
+
var self = this;
|
|
21536
|
+
var timer = setTimeout(function() {
|
|
21537
|
+
self._attempts++;
|
|
21538
|
+
if (self._operationTimeoutCb) {
|
|
21539
|
+
self._timeout = setTimeout(function() {
|
|
21540
|
+
self._operationTimeoutCb(self._attempts);
|
|
21541
|
+
}, self._operationTimeout);
|
|
21542
|
+
if (self._options.unref) {
|
|
21543
|
+
self._timeout.unref();
|
|
21544
|
+
}
|
|
21545
|
+
}
|
|
21546
|
+
self._fn(self._attempts);
|
|
21547
|
+
}, timeout);
|
|
21548
|
+
if (this._options.unref) {
|
|
21549
|
+
timer.unref();
|
|
21550
|
+
}
|
|
21551
|
+
return true;
|
|
21552
|
+
};
|
|
21553
|
+
RetryOperation.prototype.attempt = function(fn, timeoutOps) {
|
|
21554
|
+
this._fn = fn;
|
|
21555
|
+
if (timeoutOps) {
|
|
21556
|
+
if (timeoutOps.timeout) {
|
|
21557
|
+
this._operationTimeout = timeoutOps.timeout;
|
|
21558
|
+
}
|
|
21559
|
+
if (timeoutOps.cb) {
|
|
21560
|
+
this._operationTimeoutCb = timeoutOps.cb;
|
|
21561
|
+
}
|
|
21562
|
+
}
|
|
21563
|
+
var self = this;
|
|
21564
|
+
if (this._operationTimeoutCb) {
|
|
21565
|
+
this._timeout = setTimeout(function() {
|
|
21566
|
+
self._operationTimeoutCb();
|
|
21567
|
+
}, self._operationTimeout);
|
|
21568
|
+
}
|
|
21569
|
+
this._operationStart = (/* @__PURE__ */ new Date()).getTime();
|
|
21570
|
+
this._fn(this._attempts);
|
|
21571
|
+
};
|
|
21572
|
+
RetryOperation.prototype.try = function(fn) {
|
|
21573
|
+
console.log("Using RetryOperation.try() is deprecated");
|
|
21574
|
+
this.attempt(fn);
|
|
21575
|
+
};
|
|
21576
|
+
RetryOperation.prototype.start = function(fn) {
|
|
21577
|
+
console.log("Using RetryOperation.start() is deprecated");
|
|
21578
|
+
this.attempt(fn);
|
|
21579
|
+
};
|
|
21580
|
+
RetryOperation.prototype.start = RetryOperation.prototype.try;
|
|
21581
|
+
RetryOperation.prototype.errors = function() {
|
|
21582
|
+
return this._errors;
|
|
21583
|
+
};
|
|
21584
|
+
RetryOperation.prototype.attempts = function() {
|
|
21585
|
+
return this._attempts;
|
|
21586
|
+
};
|
|
21587
|
+
RetryOperation.prototype.mainError = function() {
|
|
21588
|
+
if (this._errors.length === 0) {
|
|
21589
|
+
return null;
|
|
21590
|
+
}
|
|
21591
|
+
var counts = {};
|
|
21592
|
+
var mainError = null;
|
|
21593
|
+
var mainErrorCount = 0;
|
|
21594
|
+
for (var i = 0; i < this._errors.length; i++) {
|
|
21595
|
+
var error = this._errors[i];
|
|
21596
|
+
var message = error.message;
|
|
21597
|
+
var count = (counts[message] || 0) + 1;
|
|
21598
|
+
counts[message] = count;
|
|
21599
|
+
if (count >= mainErrorCount) {
|
|
21600
|
+
mainError = error;
|
|
21601
|
+
mainErrorCount = count;
|
|
21602
|
+
}
|
|
21603
|
+
}
|
|
21604
|
+
return mainError;
|
|
21605
|
+
};
|
|
21606
|
+
}
|
|
21607
|
+
});
|
|
21608
|
+
|
|
21609
|
+
// ../../node_modules/proper-lockfile/node_modules/retry/lib/retry.js
|
|
21610
|
+
var require_retry = __commonJS({
|
|
21611
|
+
"../../node_modules/proper-lockfile/node_modules/retry/lib/retry.js"(exports$1) {
|
|
21612
|
+
var RetryOperation = require_retry_operation();
|
|
21613
|
+
exports$1.operation = function(options) {
|
|
21614
|
+
var timeouts = exports$1.timeouts(options);
|
|
21615
|
+
return new RetryOperation(timeouts, {
|
|
21616
|
+
forever: options && options.forever,
|
|
21617
|
+
unref: options && options.unref,
|
|
21618
|
+
maxRetryTime: options && options.maxRetryTime
|
|
21619
|
+
});
|
|
21620
|
+
};
|
|
21621
|
+
exports$1.timeouts = function(options) {
|
|
21622
|
+
if (options instanceof Array) {
|
|
21623
|
+
return [].concat(options);
|
|
21624
|
+
}
|
|
21625
|
+
var opts = {
|
|
21626
|
+
retries: 10,
|
|
21627
|
+
factor: 2,
|
|
21628
|
+
minTimeout: 1 * 1e3,
|
|
21629
|
+
maxTimeout: Infinity,
|
|
21630
|
+
randomize: false
|
|
21631
|
+
};
|
|
21632
|
+
for (var key in options) {
|
|
21633
|
+
opts[key] = options[key];
|
|
21634
|
+
}
|
|
21635
|
+
if (opts.minTimeout > opts.maxTimeout) {
|
|
21636
|
+
throw new Error("minTimeout is greater than maxTimeout");
|
|
21637
|
+
}
|
|
21638
|
+
var timeouts = [];
|
|
21639
|
+
for (var i = 0; i < opts.retries; i++) {
|
|
21640
|
+
timeouts.push(this.createTimeout(i, opts));
|
|
21641
|
+
}
|
|
21642
|
+
if (options && options.forever && !timeouts.length) {
|
|
21643
|
+
timeouts.push(this.createTimeout(i, opts));
|
|
21644
|
+
}
|
|
21645
|
+
timeouts.sort(function(a, b) {
|
|
21646
|
+
return a - b;
|
|
21647
|
+
});
|
|
21648
|
+
return timeouts;
|
|
21649
|
+
};
|
|
21650
|
+
exports$1.createTimeout = function(attempt, opts) {
|
|
21651
|
+
var random = opts.randomize ? Math.random() + 1 : 1;
|
|
21652
|
+
var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));
|
|
21653
|
+
timeout = Math.min(timeout, opts.maxTimeout);
|
|
21654
|
+
return timeout;
|
|
21655
|
+
};
|
|
21656
|
+
exports$1.wrap = function(obj, options, methods) {
|
|
21657
|
+
if (options instanceof Array) {
|
|
21658
|
+
methods = options;
|
|
21659
|
+
options = null;
|
|
21660
|
+
}
|
|
21661
|
+
if (!methods) {
|
|
21662
|
+
methods = [];
|
|
21663
|
+
for (var key in obj) {
|
|
21664
|
+
if (typeof obj[key] === "function") {
|
|
21665
|
+
methods.push(key);
|
|
21666
|
+
}
|
|
21667
|
+
}
|
|
21668
|
+
}
|
|
21669
|
+
for (var i = 0; i < methods.length; i++) {
|
|
21670
|
+
var method = methods[i];
|
|
21671
|
+
var original = obj[method];
|
|
21672
|
+
obj[method] = function retryWrapper(original2) {
|
|
21673
|
+
var op = exports$1.operation(options);
|
|
21674
|
+
var args = Array.prototype.slice.call(arguments, 1);
|
|
21675
|
+
var callback = args.pop();
|
|
21676
|
+
args.push(function(err) {
|
|
21677
|
+
if (op.retry(err)) {
|
|
21678
|
+
return;
|
|
21679
|
+
}
|
|
21680
|
+
if (err) {
|
|
21681
|
+
arguments[0] = op.mainError();
|
|
21682
|
+
}
|
|
21683
|
+
callback.apply(this, arguments);
|
|
21684
|
+
});
|
|
21685
|
+
op.attempt(function() {
|
|
21686
|
+
original2.apply(obj, args);
|
|
21687
|
+
});
|
|
21688
|
+
}.bind(obj, original);
|
|
21689
|
+
obj[method].options = options;
|
|
21690
|
+
}
|
|
21691
|
+
};
|
|
21692
|
+
}
|
|
21693
|
+
});
|
|
21694
|
+
|
|
21695
|
+
// ../../node_modules/proper-lockfile/node_modules/retry/index.js
|
|
21696
|
+
var require_retry2 = __commonJS({
|
|
21697
|
+
"../../node_modules/proper-lockfile/node_modules/retry/index.js"(exports$1, module) {
|
|
21698
|
+
module.exports = require_retry();
|
|
21699
|
+
}
|
|
21700
|
+
});
|
|
21701
|
+
|
|
21702
|
+
// ../../node_modules/signal-exit/signals.js
|
|
21703
|
+
var require_signals = __commonJS({
|
|
21704
|
+
"../../node_modules/signal-exit/signals.js"(exports$1, module) {
|
|
21705
|
+
module.exports = [
|
|
21706
|
+
"SIGABRT",
|
|
21707
|
+
"SIGALRM",
|
|
21708
|
+
"SIGHUP",
|
|
21709
|
+
"SIGINT",
|
|
21710
|
+
"SIGTERM"
|
|
21711
|
+
];
|
|
21712
|
+
if (process.platform !== "win32") {
|
|
21713
|
+
module.exports.push(
|
|
21714
|
+
"SIGVTALRM",
|
|
21715
|
+
"SIGXCPU",
|
|
21716
|
+
"SIGXFSZ",
|
|
21717
|
+
"SIGUSR2",
|
|
21718
|
+
"SIGTRAP",
|
|
21719
|
+
"SIGSYS",
|
|
21720
|
+
"SIGQUIT",
|
|
21721
|
+
"SIGIOT"
|
|
21722
|
+
// should detect profiler and enable/disable accordingly.
|
|
21723
|
+
// see #21
|
|
21724
|
+
// 'SIGPROF'
|
|
21725
|
+
);
|
|
21726
|
+
}
|
|
21727
|
+
if (process.platform === "linux") {
|
|
21728
|
+
module.exports.push(
|
|
21729
|
+
"SIGIO",
|
|
21730
|
+
"SIGPOLL",
|
|
21731
|
+
"SIGPWR",
|
|
21732
|
+
"SIGSTKFLT",
|
|
21733
|
+
"SIGUNUSED"
|
|
21734
|
+
);
|
|
21735
|
+
}
|
|
21736
|
+
}
|
|
21737
|
+
});
|
|
21738
|
+
|
|
21739
|
+
// ../../node_modules/signal-exit/index.js
|
|
21740
|
+
var require_signal_exit = __commonJS({
|
|
21741
|
+
"../../node_modules/signal-exit/index.js"(exports$1, module) {
|
|
21742
|
+
var process2 = global.process;
|
|
21743
|
+
var processOk = function(process3) {
|
|
21744
|
+
return process3 && typeof process3 === "object" && typeof process3.removeListener === "function" && typeof process3.emit === "function" && typeof process3.reallyExit === "function" && typeof process3.listeners === "function" && typeof process3.kill === "function" && typeof process3.pid === "number" && typeof process3.on === "function";
|
|
21745
|
+
};
|
|
21746
|
+
if (!processOk(process2)) {
|
|
21747
|
+
module.exports = function() {
|
|
21748
|
+
return function() {
|
|
21749
|
+
};
|
|
21750
|
+
};
|
|
21751
|
+
} else {
|
|
21752
|
+
assert = __require("assert");
|
|
21753
|
+
signals = require_signals();
|
|
21754
|
+
isWin = /^win/i.test(process2.platform);
|
|
21755
|
+
EE = __require("events");
|
|
21756
|
+
if (typeof EE !== "function") {
|
|
21757
|
+
EE = EE.EventEmitter;
|
|
21758
|
+
}
|
|
21759
|
+
if (process2.__signal_exit_emitter__) {
|
|
21760
|
+
emitter = process2.__signal_exit_emitter__;
|
|
21761
|
+
} else {
|
|
21762
|
+
emitter = process2.__signal_exit_emitter__ = new EE();
|
|
21763
|
+
emitter.count = 0;
|
|
21764
|
+
emitter.emitted = {};
|
|
21765
|
+
}
|
|
21766
|
+
if (!emitter.infinite) {
|
|
21767
|
+
emitter.setMaxListeners(Infinity);
|
|
21768
|
+
emitter.infinite = true;
|
|
21769
|
+
}
|
|
21770
|
+
module.exports = function(cb, opts) {
|
|
21771
|
+
if (!processOk(global.process)) {
|
|
21772
|
+
return function() {
|
|
21773
|
+
};
|
|
21774
|
+
}
|
|
21775
|
+
assert.equal(typeof cb, "function", "a callback must be provided for exit handler");
|
|
21776
|
+
if (loaded === false) {
|
|
21777
|
+
load2();
|
|
21778
|
+
}
|
|
21779
|
+
var ev = "exit";
|
|
21780
|
+
if (opts && opts.alwaysLast) {
|
|
21781
|
+
ev = "afterexit";
|
|
21782
|
+
}
|
|
21783
|
+
var remove = function() {
|
|
21784
|
+
emitter.removeListener(ev, cb);
|
|
21785
|
+
if (emitter.listeners("exit").length === 0 && emitter.listeners("afterexit").length === 0) {
|
|
21786
|
+
unload();
|
|
21787
|
+
}
|
|
21788
|
+
};
|
|
21789
|
+
emitter.on(ev, cb);
|
|
21790
|
+
return remove;
|
|
21791
|
+
};
|
|
21792
|
+
unload = function unload2() {
|
|
21793
|
+
if (!loaded || !processOk(global.process)) {
|
|
21794
|
+
return;
|
|
21795
|
+
}
|
|
21796
|
+
loaded = false;
|
|
21797
|
+
signals.forEach(function(sig) {
|
|
21798
|
+
try {
|
|
21799
|
+
process2.removeListener(sig, sigListeners[sig]);
|
|
21800
|
+
} catch (er) {
|
|
21801
|
+
}
|
|
21802
|
+
});
|
|
21803
|
+
process2.emit = originalProcessEmit;
|
|
21804
|
+
process2.reallyExit = originalProcessReallyExit;
|
|
21805
|
+
emitter.count -= 1;
|
|
21806
|
+
};
|
|
21807
|
+
module.exports.unload = unload;
|
|
21808
|
+
emit = function emit2(event, code, signal) {
|
|
21809
|
+
if (emitter.emitted[event]) {
|
|
21810
|
+
return;
|
|
21811
|
+
}
|
|
21812
|
+
emitter.emitted[event] = true;
|
|
21813
|
+
emitter.emit(event, code, signal);
|
|
21814
|
+
};
|
|
21815
|
+
sigListeners = {};
|
|
21816
|
+
signals.forEach(function(sig) {
|
|
21817
|
+
sigListeners[sig] = function listener() {
|
|
21818
|
+
if (!processOk(global.process)) {
|
|
21819
|
+
return;
|
|
21820
|
+
}
|
|
21821
|
+
var listeners = process2.listeners(sig);
|
|
21822
|
+
if (listeners.length === emitter.count) {
|
|
21823
|
+
unload();
|
|
21824
|
+
emit("exit", null, sig);
|
|
21825
|
+
emit("afterexit", null, sig);
|
|
21826
|
+
if (isWin && sig === "SIGHUP") {
|
|
21827
|
+
sig = "SIGINT";
|
|
21828
|
+
}
|
|
21829
|
+
process2.kill(process2.pid, sig);
|
|
21830
|
+
}
|
|
21831
|
+
};
|
|
21832
|
+
});
|
|
21833
|
+
module.exports.signals = function() {
|
|
21834
|
+
return signals;
|
|
21835
|
+
};
|
|
21836
|
+
loaded = false;
|
|
21837
|
+
load2 = function load3() {
|
|
21838
|
+
if (loaded || !processOk(global.process)) {
|
|
21839
|
+
return;
|
|
21840
|
+
}
|
|
21841
|
+
loaded = true;
|
|
21842
|
+
emitter.count += 1;
|
|
21843
|
+
signals = signals.filter(function(sig) {
|
|
21844
|
+
try {
|
|
21845
|
+
process2.on(sig, sigListeners[sig]);
|
|
21846
|
+
return true;
|
|
21847
|
+
} catch (er) {
|
|
21848
|
+
return false;
|
|
21849
|
+
}
|
|
21850
|
+
});
|
|
21851
|
+
process2.emit = processEmit;
|
|
21852
|
+
process2.reallyExit = processReallyExit;
|
|
21853
|
+
};
|
|
21854
|
+
module.exports.load = load2;
|
|
21855
|
+
originalProcessReallyExit = process2.reallyExit;
|
|
21856
|
+
processReallyExit = function processReallyExit2(code) {
|
|
21857
|
+
if (!processOk(global.process)) {
|
|
21858
|
+
return;
|
|
21859
|
+
}
|
|
21860
|
+
process2.exitCode = code || /* istanbul ignore next */
|
|
21861
|
+
0;
|
|
21862
|
+
emit("exit", process2.exitCode, null);
|
|
21863
|
+
emit("afterexit", process2.exitCode, null);
|
|
21864
|
+
originalProcessReallyExit.call(process2, process2.exitCode);
|
|
21865
|
+
};
|
|
21866
|
+
originalProcessEmit = process2.emit;
|
|
21867
|
+
processEmit = function processEmit2(ev, arg) {
|
|
21868
|
+
if (ev === "exit" && processOk(global.process)) {
|
|
21869
|
+
if (arg !== void 0) {
|
|
21870
|
+
process2.exitCode = arg;
|
|
21871
|
+
}
|
|
21872
|
+
var ret = originalProcessEmit.apply(this, arguments);
|
|
21873
|
+
emit("exit", process2.exitCode, null);
|
|
21874
|
+
emit("afterexit", process2.exitCode, null);
|
|
21875
|
+
return ret;
|
|
21876
|
+
} else {
|
|
21877
|
+
return originalProcessEmit.apply(this, arguments);
|
|
21878
|
+
}
|
|
21879
|
+
};
|
|
21880
|
+
}
|
|
21881
|
+
var assert;
|
|
21882
|
+
var signals;
|
|
21883
|
+
var isWin;
|
|
21884
|
+
var EE;
|
|
21885
|
+
var emitter;
|
|
21886
|
+
var unload;
|
|
21887
|
+
var emit;
|
|
21888
|
+
var sigListeners;
|
|
21889
|
+
var loaded;
|
|
21890
|
+
var load2;
|
|
21891
|
+
var originalProcessReallyExit;
|
|
21892
|
+
var processReallyExit;
|
|
21893
|
+
var originalProcessEmit;
|
|
21894
|
+
var processEmit;
|
|
21895
|
+
}
|
|
21896
|
+
});
|
|
21897
|
+
|
|
21898
|
+
// ../../node_modules/proper-lockfile/lib/mtime-precision.js
|
|
21899
|
+
var require_mtime_precision = __commonJS({
|
|
21900
|
+
"../../node_modules/proper-lockfile/lib/mtime-precision.js"(exports$1, module) {
|
|
21901
|
+
var cacheSymbol = /* @__PURE__ */ Symbol();
|
|
21902
|
+
function probe(file, fs3, callback) {
|
|
21903
|
+
const cachedPrecision = fs3[cacheSymbol];
|
|
21904
|
+
if (cachedPrecision) {
|
|
21905
|
+
return fs3.stat(file, (err, stat) => {
|
|
21906
|
+
if (err) {
|
|
21907
|
+
return callback(err);
|
|
21908
|
+
}
|
|
21909
|
+
callback(null, stat.mtime, cachedPrecision);
|
|
21910
|
+
});
|
|
21911
|
+
}
|
|
21912
|
+
const mtime = new Date(Math.ceil(Date.now() / 1e3) * 1e3 + 5);
|
|
21913
|
+
fs3.utimes(file, mtime, mtime, (err) => {
|
|
21914
|
+
if (err) {
|
|
21915
|
+
return callback(err);
|
|
21916
|
+
}
|
|
21917
|
+
fs3.stat(file, (err2, stat) => {
|
|
21918
|
+
if (err2) {
|
|
21919
|
+
return callback(err2);
|
|
21920
|
+
}
|
|
21921
|
+
const precision = stat.mtime.getTime() % 1e3 === 0 ? "s" : "ms";
|
|
21922
|
+
Object.defineProperty(fs3, cacheSymbol, { value: precision });
|
|
21923
|
+
callback(null, stat.mtime, precision);
|
|
21924
|
+
});
|
|
21925
|
+
});
|
|
21926
|
+
}
|
|
21927
|
+
function getMtime(precision) {
|
|
21928
|
+
let now = Date.now();
|
|
21929
|
+
if (precision === "s") {
|
|
21930
|
+
now = Math.ceil(now / 1e3) * 1e3;
|
|
21931
|
+
}
|
|
21932
|
+
return new Date(now);
|
|
21933
|
+
}
|
|
21934
|
+
module.exports.probe = probe;
|
|
21935
|
+
module.exports.getMtime = getMtime;
|
|
21936
|
+
}
|
|
21937
|
+
});
|
|
21938
|
+
|
|
21939
|
+
// ../../node_modules/proper-lockfile/lib/lockfile.js
|
|
21940
|
+
var require_lockfile = __commonJS({
|
|
21941
|
+
"../../node_modules/proper-lockfile/lib/lockfile.js"(exports$1, module) {
|
|
21942
|
+
var path4 = __require("path");
|
|
21943
|
+
var fs3 = require_graceful_fs();
|
|
21944
|
+
var retry = require_retry2();
|
|
21945
|
+
var onExit = require_signal_exit();
|
|
21946
|
+
var mtimePrecision = require_mtime_precision();
|
|
21947
|
+
var locks = {};
|
|
21948
|
+
function getLockFile(file, options) {
|
|
21949
|
+
return options.lockfilePath || `${file}.lock`;
|
|
21950
|
+
}
|
|
21951
|
+
function resolveCanonicalPath(file, options, callback) {
|
|
21952
|
+
if (!options.realpath) {
|
|
21953
|
+
return callback(null, path4.resolve(file));
|
|
21954
|
+
}
|
|
21955
|
+
options.fs.realpath(file, callback);
|
|
21956
|
+
}
|
|
21957
|
+
function acquireLock(file, options, callback) {
|
|
21958
|
+
const lockfilePath = getLockFile(file, options);
|
|
21959
|
+
options.fs.mkdir(lockfilePath, (err) => {
|
|
21960
|
+
if (!err) {
|
|
21961
|
+
return mtimePrecision.probe(lockfilePath, options.fs, (err2, mtime, mtimePrecision2) => {
|
|
21962
|
+
if (err2) {
|
|
21963
|
+
options.fs.rmdir(lockfilePath, () => {
|
|
21964
|
+
});
|
|
21965
|
+
return callback(err2);
|
|
21966
|
+
}
|
|
21967
|
+
callback(null, mtime, mtimePrecision2);
|
|
21968
|
+
});
|
|
21969
|
+
}
|
|
21970
|
+
if (err.code !== "EEXIST") {
|
|
21971
|
+
return callback(err);
|
|
21972
|
+
}
|
|
21973
|
+
if (options.stale <= 0) {
|
|
21974
|
+
return callback(Object.assign(new Error("Lock file is already being held"), { code: "ELOCKED", file }));
|
|
21975
|
+
}
|
|
21976
|
+
options.fs.stat(lockfilePath, (err2, stat) => {
|
|
21977
|
+
if (err2) {
|
|
21978
|
+
if (err2.code === "ENOENT") {
|
|
21979
|
+
return acquireLock(file, { ...options, stale: 0 }, callback);
|
|
21980
|
+
}
|
|
21981
|
+
return callback(err2);
|
|
21982
|
+
}
|
|
21983
|
+
if (!isLockStale(stat, options)) {
|
|
21984
|
+
return callback(Object.assign(new Error("Lock file is already being held"), { code: "ELOCKED", file }));
|
|
21985
|
+
}
|
|
21986
|
+
removeLock(file, options, (err3) => {
|
|
21987
|
+
if (err3) {
|
|
21988
|
+
return callback(err3);
|
|
21989
|
+
}
|
|
21990
|
+
acquireLock(file, { ...options, stale: 0 }, callback);
|
|
21991
|
+
});
|
|
21992
|
+
});
|
|
21993
|
+
});
|
|
21994
|
+
}
|
|
21995
|
+
function isLockStale(stat, options) {
|
|
21996
|
+
return stat.mtime.getTime() < Date.now() - options.stale;
|
|
21997
|
+
}
|
|
21998
|
+
function removeLock(file, options, callback) {
|
|
21999
|
+
options.fs.rmdir(getLockFile(file, options), (err) => {
|
|
22000
|
+
if (err && err.code !== "ENOENT") {
|
|
22001
|
+
return callback(err);
|
|
22002
|
+
}
|
|
22003
|
+
callback();
|
|
22004
|
+
});
|
|
22005
|
+
}
|
|
22006
|
+
function updateLock(file, options) {
|
|
22007
|
+
const lock2 = locks[file];
|
|
22008
|
+
if (lock2.updateTimeout) {
|
|
22009
|
+
return;
|
|
22010
|
+
}
|
|
22011
|
+
lock2.updateDelay = lock2.updateDelay || options.update;
|
|
22012
|
+
lock2.updateTimeout = setTimeout(() => {
|
|
22013
|
+
lock2.updateTimeout = null;
|
|
22014
|
+
options.fs.stat(lock2.lockfilePath, (err, stat) => {
|
|
22015
|
+
const isOverThreshold = lock2.lastUpdate + options.stale < Date.now();
|
|
22016
|
+
if (err) {
|
|
22017
|
+
if (err.code === "ENOENT" || isOverThreshold) {
|
|
22018
|
+
return setLockAsCompromised(file, lock2, Object.assign(err, { code: "ECOMPROMISED" }));
|
|
22019
|
+
}
|
|
22020
|
+
lock2.updateDelay = 1e3;
|
|
22021
|
+
return updateLock(file, options);
|
|
22022
|
+
}
|
|
22023
|
+
const isMtimeOurs = lock2.mtime.getTime() === stat.mtime.getTime();
|
|
22024
|
+
if (!isMtimeOurs) {
|
|
22025
|
+
return setLockAsCompromised(
|
|
22026
|
+
file,
|
|
22027
|
+
lock2,
|
|
22028
|
+
Object.assign(
|
|
22029
|
+
new Error("Unable to update lock within the stale threshold"),
|
|
22030
|
+
{ code: "ECOMPROMISED" }
|
|
22031
|
+
)
|
|
22032
|
+
);
|
|
22033
|
+
}
|
|
22034
|
+
const mtime = mtimePrecision.getMtime(lock2.mtimePrecision);
|
|
22035
|
+
options.fs.utimes(lock2.lockfilePath, mtime, mtime, (err2) => {
|
|
22036
|
+
const isOverThreshold2 = lock2.lastUpdate + options.stale < Date.now();
|
|
22037
|
+
if (lock2.released) {
|
|
22038
|
+
return;
|
|
22039
|
+
}
|
|
22040
|
+
if (err2) {
|
|
22041
|
+
if (err2.code === "ENOENT" || isOverThreshold2) {
|
|
22042
|
+
return setLockAsCompromised(file, lock2, Object.assign(err2, { code: "ECOMPROMISED" }));
|
|
22043
|
+
}
|
|
22044
|
+
lock2.updateDelay = 1e3;
|
|
22045
|
+
return updateLock(file, options);
|
|
22046
|
+
}
|
|
22047
|
+
lock2.mtime = mtime;
|
|
22048
|
+
lock2.lastUpdate = Date.now();
|
|
22049
|
+
lock2.updateDelay = null;
|
|
22050
|
+
updateLock(file, options);
|
|
22051
|
+
});
|
|
22052
|
+
});
|
|
22053
|
+
}, lock2.updateDelay);
|
|
22054
|
+
if (lock2.updateTimeout.unref) {
|
|
22055
|
+
lock2.updateTimeout.unref();
|
|
22056
|
+
}
|
|
22057
|
+
}
|
|
22058
|
+
function setLockAsCompromised(file, lock2, err) {
|
|
22059
|
+
lock2.released = true;
|
|
22060
|
+
if (lock2.updateTimeout) {
|
|
22061
|
+
clearTimeout(lock2.updateTimeout);
|
|
22062
|
+
}
|
|
22063
|
+
if (locks[file] === lock2) {
|
|
22064
|
+
delete locks[file];
|
|
22065
|
+
}
|
|
22066
|
+
lock2.options.onCompromised(err);
|
|
22067
|
+
}
|
|
22068
|
+
function lock(file, options, callback) {
|
|
22069
|
+
options = {
|
|
22070
|
+
stale: 1e4,
|
|
22071
|
+
update: null,
|
|
22072
|
+
realpath: true,
|
|
22073
|
+
retries: 0,
|
|
22074
|
+
fs: fs3,
|
|
22075
|
+
onCompromised: (err) => {
|
|
22076
|
+
throw err;
|
|
22077
|
+
},
|
|
22078
|
+
...options
|
|
22079
|
+
};
|
|
22080
|
+
options.retries = options.retries || 0;
|
|
22081
|
+
options.retries = typeof options.retries === "number" ? { retries: options.retries } : options.retries;
|
|
22082
|
+
options.stale = Math.max(options.stale || 0, 2e3);
|
|
22083
|
+
options.update = options.update == null ? options.stale / 2 : options.update || 0;
|
|
22084
|
+
options.update = Math.max(Math.min(options.update, options.stale / 2), 1e3);
|
|
22085
|
+
resolveCanonicalPath(file, options, (err, file2) => {
|
|
22086
|
+
if (err) {
|
|
22087
|
+
return callback(err);
|
|
22088
|
+
}
|
|
22089
|
+
const operation = retry.operation(options.retries);
|
|
22090
|
+
operation.attempt(() => {
|
|
22091
|
+
acquireLock(file2, options, (err2, mtime, mtimePrecision2) => {
|
|
22092
|
+
if (operation.retry(err2)) {
|
|
22093
|
+
return;
|
|
22094
|
+
}
|
|
22095
|
+
if (err2) {
|
|
22096
|
+
return callback(operation.mainError());
|
|
22097
|
+
}
|
|
22098
|
+
const lock2 = locks[file2] = {
|
|
22099
|
+
lockfilePath: getLockFile(file2, options),
|
|
22100
|
+
mtime,
|
|
22101
|
+
mtimePrecision: mtimePrecision2,
|
|
22102
|
+
options,
|
|
22103
|
+
lastUpdate: Date.now()
|
|
22104
|
+
};
|
|
22105
|
+
updateLock(file2, options);
|
|
22106
|
+
callback(null, (releasedCallback) => {
|
|
22107
|
+
if (lock2.released) {
|
|
22108
|
+
return releasedCallback && releasedCallback(Object.assign(new Error("Lock is already released"), { code: "ERELEASED" }));
|
|
22109
|
+
}
|
|
22110
|
+
unlock(file2, { ...options, realpath: false }, releasedCallback);
|
|
22111
|
+
});
|
|
22112
|
+
});
|
|
22113
|
+
});
|
|
22114
|
+
});
|
|
22115
|
+
}
|
|
22116
|
+
function unlock(file, options, callback) {
|
|
22117
|
+
options = {
|
|
22118
|
+
fs: fs3,
|
|
22119
|
+
realpath: true,
|
|
22120
|
+
...options
|
|
22121
|
+
};
|
|
22122
|
+
resolveCanonicalPath(file, options, (err, file2) => {
|
|
22123
|
+
if (err) {
|
|
22124
|
+
return callback(err);
|
|
22125
|
+
}
|
|
22126
|
+
const lock2 = locks[file2];
|
|
22127
|
+
if (!lock2) {
|
|
22128
|
+
return callback(Object.assign(new Error("Lock is not acquired/owned by you"), { code: "ENOTACQUIRED" }));
|
|
22129
|
+
}
|
|
22130
|
+
lock2.updateTimeout && clearTimeout(lock2.updateTimeout);
|
|
22131
|
+
lock2.released = true;
|
|
22132
|
+
delete locks[file2];
|
|
22133
|
+
removeLock(file2, options, callback);
|
|
22134
|
+
});
|
|
22135
|
+
}
|
|
22136
|
+
function check(file, options, callback) {
|
|
22137
|
+
options = {
|
|
22138
|
+
stale: 1e4,
|
|
22139
|
+
realpath: true,
|
|
22140
|
+
fs: fs3,
|
|
22141
|
+
...options
|
|
22142
|
+
};
|
|
22143
|
+
options.stale = Math.max(options.stale || 0, 2e3);
|
|
22144
|
+
resolveCanonicalPath(file, options, (err, file2) => {
|
|
22145
|
+
if (err) {
|
|
22146
|
+
return callback(err);
|
|
22147
|
+
}
|
|
22148
|
+
options.fs.stat(getLockFile(file2, options), (err2, stat) => {
|
|
22149
|
+
if (err2) {
|
|
22150
|
+
return err2.code === "ENOENT" ? callback(null, false) : callback(err2);
|
|
22151
|
+
}
|
|
22152
|
+
return callback(null, !isLockStale(stat, options));
|
|
22153
|
+
});
|
|
22154
|
+
});
|
|
22155
|
+
}
|
|
22156
|
+
function getLocks() {
|
|
22157
|
+
return locks;
|
|
22158
|
+
}
|
|
22159
|
+
onExit(() => {
|
|
22160
|
+
for (const file in locks) {
|
|
22161
|
+
const options = locks[file].options;
|
|
22162
|
+
try {
|
|
22163
|
+
options.fs.rmdirSync(getLockFile(file, options));
|
|
22164
|
+
} catch (e) {
|
|
22165
|
+
}
|
|
22166
|
+
}
|
|
22167
|
+
});
|
|
22168
|
+
module.exports.lock = lock;
|
|
22169
|
+
module.exports.unlock = unlock;
|
|
22170
|
+
module.exports.check = check;
|
|
22171
|
+
module.exports.getLocks = getLocks;
|
|
22172
|
+
}
|
|
22173
|
+
});
|
|
22174
|
+
|
|
22175
|
+
// ../../node_modules/proper-lockfile/lib/adapter.js
|
|
22176
|
+
var require_adapter = __commonJS({
|
|
22177
|
+
"../../node_modules/proper-lockfile/lib/adapter.js"(exports$1, module) {
|
|
22178
|
+
var fs3 = require_graceful_fs();
|
|
22179
|
+
function createSyncFs(fs4) {
|
|
22180
|
+
const methods = ["mkdir", "realpath", "stat", "rmdir", "utimes"];
|
|
22181
|
+
const newFs = { ...fs4 };
|
|
22182
|
+
methods.forEach((method) => {
|
|
22183
|
+
newFs[method] = (...args) => {
|
|
22184
|
+
const callback = args.pop();
|
|
22185
|
+
let ret;
|
|
22186
|
+
try {
|
|
22187
|
+
ret = fs4[`${method}Sync`](...args);
|
|
22188
|
+
} catch (err) {
|
|
22189
|
+
return callback(err);
|
|
22190
|
+
}
|
|
22191
|
+
callback(null, ret);
|
|
22192
|
+
};
|
|
22193
|
+
});
|
|
22194
|
+
return newFs;
|
|
22195
|
+
}
|
|
22196
|
+
function toPromise(method) {
|
|
22197
|
+
return (...args) => new Promise((resolve3, reject) => {
|
|
22198
|
+
args.push((err, result2) => {
|
|
22199
|
+
if (err) {
|
|
22200
|
+
reject(err);
|
|
22201
|
+
} else {
|
|
22202
|
+
resolve3(result2);
|
|
22203
|
+
}
|
|
22204
|
+
});
|
|
22205
|
+
method(...args);
|
|
22206
|
+
});
|
|
22207
|
+
}
|
|
22208
|
+
function toSync(method) {
|
|
22209
|
+
return (...args) => {
|
|
22210
|
+
let err;
|
|
22211
|
+
let result2;
|
|
22212
|
+
args.push((_err, _result) => {
|
|
22213
|
+
err = _err;
|
|
22214
|
+
result2 = _result;
|
|
22215
|
+
});
|
|
22216
|
+
method(...args);
|
|
22217
|
+
if (err) {
|
|
22218
|
+
throw err;
|
|
22219
|
+
}
|
|
22220
|
+
return result2;
|
|
22221
|
+
};
|
|
22222
|
+
}
|
|
22223
|
+
function toSyncOptions(options) {
|
|
22224
|
+
options = { ...options };
|
|
22225
|
+
options.fs = createSyncFs(options.fs || fs3);
|
|
22226
|
+
if (typeof options.retries === "number" && options.retries > 0 || options.retries && typeof options.retries.retries === "number" && options.retries.retries > 0) {
|
|
22227
|
+
throw Object.assign(new Error("Cannot use retries with the sync api"), { code: "ESYNC" });
|
|
22228
|
+
}
|
|
22229
|
+
return options;
|
|
22230
|
+
}
|
|
22231
|
+
module.exports = {
|
|
22232
|
+
toPromise,
|
|
22233
|
+
toSync,
|
|
22234
|
+
toSyncOptions
|
|
22235
|
+
};
|
|
22236
|
+
}
|
|
22237
|
+
});
|
|
22238
|
+
|
|
22239
|
+
// ../../node_modules/proper-lockfile/index.js
|
|
22240
|
+
var require_proper_lockfile = __commonJS({
|
|
22241
|
+
"../../node_modules/proper-lockfile/index.js"(exports$1, module) {
|
|
22242
|
+
var lockfile2 = require_lockfile();
|
|
22243
|
+
var { toPromise, toSync, toSyncOptions } = require_adapter();
|
|
22244
|
+
async function lock(file, options) {
|
|
22245
|
+
const release = await toPromise(lockfile2.lock)(file, options);
|
|
22246
|
+
return toPromise(release);
|
|
22247
|
+
}
|
|
22248
|
+
function lockSync(file, options) {
|
|
22249
|
+
const release = toSync(lockfile2.lock)(file, toSyncOptions(options));
|
|
22250
|
+
return toSync(release);
|
|
22251
|
+
}
|
|
22252
|
+
function unlock(file, options) {
|
|
22253
|
+
return toPromise(lockfile2.unlock)(file, options);
|
|
22254
|
+
}
|
|
22255
|
+
function unlockSync(file, options) {
|
|
22256
|
+
return toSync(lockfile2.unlock)(file, toSyncOptions(options));
|
|
22257
|
+
}
|
|
22258
|
+
function check(file, options) {
|
|
22259
|
+
return toPromise(lockfile2.check)(file, options);
|
|
22260
|
+
}
|
|
22261
|
+
function checkSync(file, options) {
|
|
22262
|
+
return toSync(lockfile2.check)(file, toSyncOptions(options));
|
|
22263
|
+
}
|
|
22264
|
+
module.exports = lock;
|
|
22265
|
+
module.exports.lock = lock;
|
|
22266
|
+
module.exports.unlock = unlock;
|
|
22267
|
+
module.exports.lockSync = lockSync;
|
|
22268
|
+
module.exports.unlockSync = unlockSync;
|
|
22269
|
+
module.exports.check = check;
|
|
22270
|
+
module.exports.checkSync = checkSync;
|
|
22271
|
+
}
|
|
22272
|
+
});
|
|
22273
|
+
|
|
22274
|
+
// package.json
|
|
22275
|
+
var package_default;
|
|
22276
|
+
var init_package = __esm({
|
|
22277
|
+
"package.json"() {
|
|
22278
|
+
package_default = {
|
|
22279
|
+
name: "@gravity-rail/cli",
|
|
22280
|
+
version: "0.55.0",
|
|
22281
|
+
description: "Gravity Rail CLI \u2014 manage workspaces from the command line",
|
|
22282
|
+
type: "module",
|
|
22283
|
+
bin: {
|
|
22284
|
+
gr: "./dist/gr.js"
|
|
22285
|
+
},
|
|
22286
|
+
exports: {
|
|
22287
|
+
".": {
|
|
22288
|
+
types: "./dist/lib.d.ts",
|
|
22289
|
+
import: "./dist/lib.js"
|
|
22290
|
+
},
|
|
22291
|
+
"./lib": {
|
|
22292
|
+
types: "./dist/lib.d.ts",
|
|
22293
|
+
import: "./dist/lib.js"
|
|
22294
|
+
},
|
|
22295
|
+
"./cli-utils": {
|
|
22296
|
+
types: "./dist/cli-utils.d.ts",
|
|
22297
|
+
import: "./dist/cli-utils.js"
|
|
22298
|
+
}
|
|
22299
|
+
},
|
|
22300
|
+
files: [
|
|
22301
|
+
"dist"
|
|
22302
|
+
],
|
|
22303
|
+
license: "MIT",
|
|
22304
|
+
repository: {
|
|
22305
|
+
type: "git",
|
|
22306
|
+
url: "https://developer.gravityrail.com"
|
|
22307
|
+
},
|
|
22308
|
+
homepage: "https://developer.gravityrail.com",
|
|
22309
|
+
keywords: [
|
|
22310
|
+
"gravity-rail",
|
|
22311
|
+
"cli",
|
|
22312
|
+
"healthcare",
|
|
22313
|
+
"workspace"
|
|
22314
|
+
],
|
|
22315
|
+
engines: {
|
|
22316
|
+
node: ">=18"
|
|
22317
|
+
},
|
|
22318
|
+
scripts: {
|
|
22319
|
+
build: "tsup",
|
|
22320
|
+
"generate:skill-docs": "tsx scripts/generate-skill-docs.ts",
|
|
22321
|
+
clean: "rm -rf dist",
|
|
22322
|
+
typecheck: "tsc --noEmit",
|
|
22323
|
+
test: "jest --forceExit",
|
|
22324
|
+
"test:ci": "jest --forceExit --passWithNoTests --coverage --coverageReporters=json-summary --coverageReporters=text-summary"
|
|
22325
|
+
},
|
|
22326
|
+
dependencies: {
|
|
22327
|
+
"@gravity-rail/sdk": "workspace:^",
|
|
22328
|
+
"js-yaml": "^5.4.3",
|
|
22329
|
+
"proper-lockfile": "^4.1.2"
|
|
22330
|
+
},
|
|
22331
|
+
devDependencies: {
|
|
22332
|
+
"@gravity-rail/sandbox": "workspace:*",
|
|
22333
|
+
"@types/jest": "^30.0.0",
|
|
22334
|
+
"@types/node": "^26.6.4",
|
|
22335
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
22336
|
+
jest: "^30.5.2",
|
|
22337
|
+
"ts-jest": "29.4.9",
|
|
22338
|
+
tsup: "^8.5.1",
|
|
22339
|
+
typescript: "^6.0.3",
|
|
22340
|
+
undici: "6.28.1"
|
|
22341
|
+
}
|
|
22342
|
+
};
|
|
22343
|
+
}
|
|
22344
|
+
});
|
|
20382
22345
|
var DEFAULT_PROFILE, CredentialsManager;
|
|
20383
22346
|
var init_credentials_manager = __esm({
|
|
20384
22347
|
"src/cli-utils/credentials-manager.ts"() {
|
|
@@ -20743,7 +22706,7 @@ function validateTokenResponse(tokenData) {
|
|
|
20743
22706
|
if (tokenData.expires_in != null) {
|
|
20744
22707
|
const raw = Number(tokenData.expires_in);
|
|
20745
22708
|
if (!Number.isFinite(raw) || raw < 60 || raw > 31536e3) {
|
|
20746
|
-
stderr(
|
|
22709
|
+
stderr(" Warning: unusual expires_in value in the token response, using default");
|
|
20747
22710
|
} else {
|
|
20748
22711
|
expiresIn = raw;
|
|
20749
22712
|
}
|
|
@@ -20963,7 +22926,8 @@ async function performOAuthFlow(options) {
|
|
|
20963
22926
|
method: "POST",
|
|
20964
22927
|
headers: {
|
|
20965
22928
|
...auth.headers,
|
|
20966
|
-
"Content-Type": "application/x-www-form-urlencoded"
|
|
22929
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
22930
|
+
"User-Agent": TOKEN_REQUEST_USER_AGENT
|
|
20967
22931
|
},
|
|
20968
22932
|
body: new URLSearchParams({
|
|
20969
22933
|
grant_type: "authorization_code",
|
|
@@ -21000,53 +22964,150 @@ async function performOAuthFlow(options) {
|
|
|
21000
22964
|
return { accessToken, credentials: creds };
|
|
21001
22965
|
}
|
|
21002
22966
|
}
|
|
21003
|
-
|
|
21004
|
-
|
|
22967
|
+
function parseOAuthErrorCode(body) {
|
|
22968
|
+
try {
|
|
22969
|
+
const parsed = JSON.parse(body);
|
|
22970
|
+
if (parsed && typeof parsed === "object") {
|
|
22971
|
+
const code = parsed.error;
|
|
22972
|
+
if (typeof code === "string") return code;
|
|
22973
|
+
}
|
|
22974
|
+
} catch {
|
|
22975
|
+
}
|
|
22976
|
+
return void 0;
|
|
22977
|
+
}
|
|
22978
|
+
function isFreshEnough(creds) {
|
|
22979
|
+
return !creds.expiresAt || new Date(creds.expiresAt).getTime() > Date.now() + ACCESS_TOKEN_EXPIRY_BUFFER_MS;
|
|
22980
|
+
}
|
|
22981
|
+
async function acquireRefreshLock(credentialsPath) {
|
|
22982
|
+
try {
|
|
22983
|
+
const cacheDir = dirname$1(credentialsPath);
|
|
22984
|
+
if (!existsSync(cacheDir)) {
|
|
22985
|
+
mkdirSync(cacheDir, { recursive: true, mode: 448 });
|
|
22986
|
+
}
|
|
22987
|
+
return await import_proper_lockfile.default.lock(credentialsPath, {
|
|
22988
|
+
realpath: false,
|
|
22989
|
+
retries: REFRESH_LOCK_RETRIES,
|
|
22990
|
+
// The library default throws from a timer, which would crash the
|
|
22991
|
+
// command. Losing the lock mid-refresh is worth a warning, not that.
|
|
22992
|
+
// The library has already dropped its in-process record of the lock
|
|
22993
|
+
// by the time this runs, so the `release()` in `refreshAccessToken`'s
|
|
22994
|
+
// `finally` is refused (ENOTACQUIRED) and can never remove a lock
|
|
22995
|
+
// another process has since taken.
|
|
22996
|
+
onCompromised: () => {
|
|
22997
|
+
stderr(
|
|
22998
|
+
" Warning: lost the credential refresh lock; another gr process may refresh at the same time"
|
|
22999
|
+
);
|
|
23000
|
+
}
|
|
23001
|
+
});
|
|
23002
|
+
} catch {
|
|
23003
|
+
throw new Error(REFRESH_LOCK_FAILED);
|
|
23004
|
+
}
|
|
23005
|
+
}
|
|
23006
|
+
async function refreshAccessToken(envConfig, _creds, credentialsManager, env, profile) {
|
|
23007
|
+
const profileName = credentialsManager.resolveProfileName(profile, env);
|
|
23008
|
+
const release = await acquireRefreshLock(credentialsManager.getCredentialsFilePath(env));
|
|
23009
|
+
try {
|
|
23010
|
+
return await refreshUnderLock(envConfig, credentialsManager, env, profileName);
|
|
23011
|
+
} finally {
|
|
23012
|
+
await release().catch(() => void 0);
|
|
23013
|
+
}
|
|
23014
|
+
}
|
|
23015
|
+
async function refreshUnderLock(envConfig, credentialsManager, env, profileName) {
|
|
23016
|
+
const stored = credentialsManager.load(env, profileName);
|
|
23017
|
+
if (stored?.accessToken && isFreshEnough(stored)) {
|
|
23018
|
+
return stored;
|
|
23019
|
+
}
|
|
23020
|
+
if (!stored?.refreshToken || !stored.clientId) {
|
|
21005
23021
|
stderr(" Cannot refresh: missing credentials (re-login required)");
|
|
21006
23022
|
return null;
|
|
21007
23023
|
}
|
|
21008
|
-
const
|
|
21009
|
-
const
|
|
21010
|
-
|
|
23024
|
+
const presentedRefreshToken = stored.refreshToken;
|
|
23025
|
+
const auth = tokenRequestAuth(stored.clientId, stored.clientSecret);
|
|
23026
|
+
let response;
|
|
21011
23027
|
try {
|
|
21012
|
-
|
|
23028
|
+
response = await fetch(`${envConfig.apiUrl}/api/v2/oauth/token`, {
|
|
21013
23029
|
method: "POST",
|
|
21014
23030
|
headers: {
|
|
21015
23031
|
...auth.headers,
|
|
21016
|
-
"Content-Type": "application/x-www-form-urlencoded"
|
|
23032
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
23033
|
+
"User-Agent": TOKEN_REQUEST_USER_AGENT
|
|
21017
23034
|
},
|
|
21018
23035
|
body: new URLSearchParams({
|
|
21019
23036
|
grant_type: "refresh_token",
|
|
21020
|
-
refresh_token:
|
|
23037
|
+
refresh_token: presentedRefreshToken,
|
|
21021
23038
|
...auth.params
|
|
21022
|
-
})
|
|
23039
|
+
}),
|
|
23040
|
+
// Bounds the request and the body reads below. Never retried: a
|
|
23041
|
+
// second POST of the same token is itself a reuse.
|
|
23042
|
+
//
|
|
23043
|
+
// Known residual: an abort only stops *this* side. If the server
|
|
23044
|
+
// commits the rotation after the deadline, the response carrying the
|
|
23045
|
+
// successor is lost and the stored token is spent; the next refresh
|
|
23046
|
+
// of it is a genuine invalid_grant and clears the profile. The client
|
|
23047
|
+
// cannot recover an unseen successor; the deadline is long enough
|
|
23048
|
+
// that this needs a token endpoint stalled for 15 s, not a slow one.
|
|
23049
|
+
signal: AbortSignal.timeout(REFRESH_REQUEST_TIMEOUT_MS)
|
|
21023
23050
|
});
|
|
21024
|
-
|
|
21025
|
-
|
|
21026
|
-
|
|
21027
|
-
|
|
21028
|
-
|
|
21029
|
-
|
|
21030
|
-
|
|
23051
|
+
} catch {
|
|
23052
|
+
throw new Error(REFRESH_REQUEST_FAILED);
|
|
23053
|
+
}
|
|
23054
|
+
if (!response.ok) {
|
|
23055
|
+
let body;
|
|
23056
|
+
try {
|
|
23057
|
+
body = await response.text();
|
|
23058
|
+
} catch {
|
|
23059
|
+
throw new Error(REFRESH_REQUEST_FAILED);
|
|
23060
|
+
}
|
|
23061
|
+
if (response.status === 400 && parseOAuthErrorCode(body) === "invalid_grant") {
|
|
23062
|
+
const current = credentialsManager.load(env, profileName);
|
|
23063
|
+
if (!current) {
|
|
23064
|
+
stderr(" The server rejected the stored refresh token; re-login required");
|
|
23065
|
+
return null;
|
|
23066
|
+
}
|
|
23067
|
+
if (current.refreshToken === presentedRefreshToken) {
|
|
23068
|
+
credentialsManager.clear(env, profileName);
|
|
23069
|
+
stderr(" The server rejected the stored refresh token; re-login required");
|
|
23070
|
+
return null;
|
|
21031
23071
|
}
|
|
21032
|
-
|
|
23072
|
+
throw new Error(REFRESH_SUPERSEDED);
|
|
23073
|
+
}
|
|
23074
|
+
if (parseOAuthErrorCode(body) === "invalid_client") {
|
|
23075
|
+
stderr(" The server no longer recognises this profile's OAuth client; re-login required");
|
|
21033
23076
|
return null;
|
|
21034
23077
|
}
|
|
21035
|
-
|
|
21036
|
-
|
|
21037
|
-
|
|
21038
|
-
|
|
21039
|
-
|
|
21040
|
-
|
|
21041
|
-
|
|
21042
|
-
|
|
21043
|
-
|
|
21044
|
-
|
|
21045
|
-
|
|
21046
|
-
stderr(` Token refresh error: ${err instanceof Error ? err.message : "unknown"}`);
|
|
21047
|
-
credentialsManager.clear(env, profileName);
|
|
23078
|
+
throw new Error(REFRESH_FAILED);
|
|
23079
|
+
}
|
|
23080
|
+
let tokens;
|
|
23081
|
+
try {
|
|
23082
|
+
tokens = validateTokenResponse(await response.json());
|
|
23083
|
+
} catch {
|
|
23084
|
+
throw new Error(REFRESH_BAD_RESPONSE);
|
|
23085
|
+
}
|
|
23086
|
+
const latest = credentialsManager.load(env, profileName);
|
|
23087
|
+
if (!latest) {
|
|
23088
|
+
stderr(" Cannot refresh: missing credentials (re-login required)");
|
|
21048
23089
|
return null;
|
|
21049
23090
|
}
|
|
23091
|
+
if (latest.clientId !== stored.clientId || latest.refreshToken !== presentedRefreshToken) {
|
|
23092
|
+
if (latest.accessToken && isFreshEnough(latest)) {
|
|
23093
|
+
return latest;
|
|
23094
|
+
}
|
|
23095
|
+
throw new Error(REFRESH_SUPERSEDED);
|
|
23096
|
+
}
|
|
23097
|
+
const updated = {
|
|
23098
|
+
...latest,
|
|
23099
|
+
accessToken: tokens.accessToken,
|
|
23100
|
+
// A server may omit `refresh_token` when it does not rotate; the
|
|
23101
|
+
// presented token then stays valid.
|
|
23102
|
+
refreshToken: tokens.refreshToken ?? presentedRefreshToken,
|
|
23103
|
+
expiresAt: new Date(Date.now() + tokens.expiresIn * 1e3).toISOString()
|
|
23104
|
+
};
|
|
23105
|
+
try {
|
|
23106
|
+
credentialsManager.save(env, updated, profileName);
|
|
23107
|
+
} catch {
|
|
23108
|
+
throw new Error(REFRESH_SAVE_FAILED);
|
|
23109
|
+
}
|
|
23110
|
+
return updated;
|
|
21050
23111
|
}
|
|
21051
23112
|
async function resolveNonInteractiveAuth(options) {
|
|
21052
23113
|
const { env, envConfig, credentialsManager, profile } = options;
|
|
@@ -21071,12 +23132,23 @@ async function resolveNonInteractiveAuth(options) {
|
|
|
21071
23132
|
if (!refreshed?.accessToken) return null;
|
|
21072
23133
|
return { accessToken: refreshed.accessToken, credentials: refreshed };
|
|
21073
23134
|
}
|
|
21074
|
-
var ACCESS_TOKEN_EXPIRY_BUFFER_MS, FIRST_PARTY_CLIENT_METADATA_FIELD;
|
|
23135
|
+
var import_proper_lockfile, ACCESS_TOKEN_EXPIRY_BUFFER_MS, TOKEN_REQUEST_USER_AGENT, REFRESH_REQUEST_TIMEOUT_MS, REFRESH_LOCK_RETRIES, REFRESH_LOCK_FAILED, REFRESH_REQUEST_FAILED, REFRESH_FAILED, REFRESH_SUPERSEDED, REFRESH_BAD_RESPONSE, REFRESH_SAVE_FAILED, FIRST_PARTY_CLIENT_METADATA_FIELD;
|
|
21075
23136
|
var init_auth = __esm({
|
|
21076
23137
|
"src/cli-utils/auth.ts"() {
|
|
23138
|
+
import_proper_lockfile = __toESM(require_proper_lockfile());
|
|
23139
|
+
init_package();
|
|
21077
23140
|
init_config();
|
|
21078
23141
|
init_credentials_manager();
|
|
21079
23142
|
ACCESS_TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1e3;
|
|
23143
|
+
TOKEN_REQUEST_USER_AGENT = `gravityrail-cli/${package_default.version}`;
|
|
23144
|
+
REFRESH_REQUEST_TIMEOUT_MS = 15e3;
|
|
23145
|
+
REFRESH_LOCK_RETRIES = { retries: 23, factor: 2, minTimeout: 100, maxTimeout: 1e3 };
|
|
23146
|
+
REFRESH_LOCK_FAILED = "Could not lock the credential store to refresh the access token (another gr process may still be refreshing). Stored credentials were kept; retry the command.";
|
|
23147
|
+
REFRESH_REQUEST_FAILED = "Token refresh did not complete (network error or timeout). Stored credentials were kept; retry the command.";
|
|
23148
|
+
REFRESH_FAILED = "Token refresh failed. Stored credentials were kept; retry the command, and log in again if it keeps failing.";
|
|
23149
|
+
REFRESH_SUPERSEDED = "Token refresh was rejected, but the stored credentials changed meanwhile and were kept. Retry the command.";
|
|
23150
|
+
REFRESH_BAD_RESPONSE = "Token refresh returned an unusable response. Stored credentials were kept; retry the command.";
|
|
23151
|
+
REFRESH_SAVE_FAILED = "Token refresh succeeded, but the new credentials could not be saved. Retry the command, and log in again if it keeps failing.";
|
|
21080
23152
|
FIRST_PARTY_CLIENT_METADATA_FIELD = "gravityrail_first_party_cli_client_id";
|
|
21081
23153
|
}
|
|
21082
23154
|
});
|
|
@@ -22438,6 +24510,9 @@ function commandNeedsJsonBody(cmd, parsedArgs) {
|
|
|
22438
24510
|
}
|
|
22439
24511
|
return false;
|
|
22440
24512
|
}
|
|
24513
|
+
if (cmd.acceptsJsonInput === true) {
|
|
24514
|
+
return true;
|
|
24515
|
+
}
|
|
22441
24516
|
if (parsedArgs.data !== void 0 || parsedArgs.file !== void 0) {
|
|
22442
24517
|
return true;
|
|
22443
24518
|
}
|
|
@@ -22959,7 +25034,7 @@ var CommandRegistry = class {
|
|
|
22959
25034
|
lines.push(" Requires: --allow-write");
|
|
22960
25035
|
}
|
|
22961
25036
|
const action = cmd.path[cmd.path.length - 1] ?? "";
|
|
22962
|
-
const showsJsonHints = action === "create" || action === "update" || cmd.args?.some((a) => a.name === "data"
|
|
25037
|
+
const showsJsonHints = action === "create" || action === "update" || cmd.args?.some((a) => a.name === "data");
|
|
22963
25038
|
if (cmd.args && cmd.args.length > 0) {
|
|
22964
25039
|
lines.push("", "Arguments:");
|
|
22965
25040
|
for (const arg of cmd.args) {
|
|
@@ -23292,6 +25367,8 @@ Optional
|
|
|
23292
25367
|
chatModelConfig (object|null) Chat model overrides (temperature, thinking, \u2026)
|
|
23293
25368
|
realtimeModelId (string|null) Voice/realtime model (see \`gr ai-models realtime\`)
|
|
23294
25369
|
e.g. "xai:realtime:voice-agent-2" (Grok Voice Think Fast 2)
|
|
25370
|
+
or opt in to "xai:realtime:voice-agent-3" (Grok Voice
|
|
25371
|
+
3.0; not yet cleared for strict-routing workflows)
|
|
23295
25372
|
Native models auto-fill tts=native + default voice when
|
|
23296
25373
|
realtimeModelConfig is omitted.
|
|
23297
25374
|
realtimeModelConfig (object|null) Realtime config. Native example:
|
|
@@ -23313,6 +25390,10 @@ One-shot workflow voice WITHOUT creating an agent (preferred for "use Grok Voice
|
|
|
23313
25390
|
gr workflows update --id <wf> -d '{"realtimeModelId":"xai:realtime:voice-agent-2"}'
|
|
23314
25391
|
gr workflows publish --workflow-id <wf>
|
|
23315
25392
|
|
|
25393
|
+
Opt a workflow into Grok Voice 3.0 (same xAI voices as 2.0; not the default):
|
|
25394
|
+
gr workflows update --id <wf> -d '{"realtimeModelId":"xai:realtime:voice-agent-3"}'
|
|
25395
|
+
gr workflows publish --workflow-id <wf>
|
|
25396
|
+
|
|
23316
25397
|
List models:
|
|
23317
25398
|
gr ai-models chat | realtime | voice
|
|
23318
25399
|
`;
|
|
@@ -23342,6 +25423,7 @@ ${AGENT_FIELD_REFERENCE}`,
|
|
|
23342
25423
|
],
|
|
23343
25424
|
updateExamples: [
|
|
23344
25425
|
`gr agents update --id 42 -d '{"realtimeModelId":"xai:realtime:voice-agent-2"}'`,
|
|
25426
|
+
`gr agents update --id 42 -d '{"realtimeModelId":"xai:realtime:voice-agent-3"}'`,
|
|
23345
25427
|
"gr agents update --id 42 --file agent.json"
|
|
23346
25428
|
]
|
|
23347
25429
|
})
|
|
@@ -25224,6 +27306,9 @@ Assistant / models (live on the DRAFT revision \u2014 publish to go live)
|
|
|
25224
27306
|
update: null = voice off
|
|
25225
27307
|
One-shot voice example:
|
|
25226
27308
|
{"realtimeModelId":"xai:realtime:voice-agent-2"}
|
|
27309
|
+
Opt in to Grok Voice 3.0 (not the default; not yet
|
|
27310
|
+
cleared for routingMode "strict"):
|
|
27311
|
+
{"realtimeModelId":"xai:realtime:voice-agent-3"}
|
|
25227
27312
|
A native model named WITHOUT a config gets
|
|
25228
27313
|
tts=native + the provider fallback voice
|
|
25229
27314
|
(xAI \u2192 xai:voice:eve, not cosmo). Explicit config:
|
|
@@ -25290,6 +27375,24 @@ var NOTE_COLUMNS = [
|
|
|
25290
27375
|
},
|
|
25291
27376
|
COL.created()
|
|
25292
27377
|
];
|
|
27378
|
+
var CONFIG_HEALTH_COLUMNS = [
|
|
27379
|
+
{ header: "SEVERITY", getValue: (item) => String(item.severity ?? "") },
|
|
27380
|
+
{ header: "CODE", getValue: (item) => String(item.code ?? "") },
|
|
27381
|
+
{ header: "SUBJECT", getValue: (item) => String(item.subject?.type ?? "") },
|
|
27382
|
+
{
|
|
27383
|
+
header: "SUBJECT-ID",
|
|
27384
|
+
getValue: (item) => String(item.subject?.id ?? "")
|
|
27385
|
+
},
|
|
27386
|
+
{
|
|
27387
|
+
header: "TASK",
|
|
27388
|
+
getValue: (item) => String(item.remediation?.focus?.taskId ?? "")
|
|
27389
|
+
},
|
|
27390
|
+
{
|
|
27391
|
+
header: "MESSAGE",
|
|
27392
|
+
getValue: (item) => String(item.message ?? ""),
|
|
27393
|
+
maxWidth: 80
|
|
27394
|
+
}
|
|
27395
|
+
];
|
|
25293
27396
|
var CONTRIBUTOR_COLUMNS = [
|
|
25294
27397
|
COL.id(),
|
|
25295
27398
|
{
|
|
@@ -25490,6 +27593,26 @@ var workflowsDomain = {
|
|
|
25490
27593
|
outputData(result2, ctx);
|
|
25491
27594
|
}
|
|
25492
27595
|
},
|
|
27596
|
+
// Config health (draft revision)
|
|
27597
|
+
{
|
|
27598
|
+
path: ["workflows", "validate-config"],
|
|
27599
|
+
description: "Report the workflow's configuration health issues (draft revision) \u2014 the same findings the editor shows",
|
|
27600
|
+
requiresWorkspace: true,
|
|
27601
|
+
args: [{ name: "id", description: "Workflow ID", required: true }],
|
|
27602
|
+
handler: async ({ ctx, workspace, args }) => {
|
|
27603
|
+
const result2 = await requireAuth(ctx).apiClient.getWorkflowConfigValidation(
|
|
27604
|
+
workspace,
|
|
27605
|
+
requireNumber(args, "id")
|
|
27606
|
+
);
|
|
27607
|
+
if (ctx.outputFormat === "json" || ctx.outputFormat === "jsonl") {
|
|
27608
|
+
outputData(result2, ctx);
|
|
27609
|
+
} else {
|
|
27610
|
+
outputData(result2.configHealthIssues ?? [], ctx, CONFIG_HEALTH_COLUMNS);
|
|
27611
|
+
stderr2(`issues=${(result2.configHealthIssues ?? []).length}
|
|
27612
|
+
`);
|
|
27613
|
+
}
|
|
27614
|
+
}
|
|
27615
|
+
},
|
|
25493
27616
|
// Diagram
|
|
25494
27617
|
{
|
|
25495
27618
|
path: ["workflows", "diagram"],
|
|
@@ -25956,6 +28079,20 @@ ${WORKFLOW_FIELD_REFERENCE}`,
|
|
|
25956
28079
|
]
|
|
25957
28080
|
};
|
|
25958
28081
|
init_errors();
|
|
28082
|
+
|
|
28083
|
+
// src/lib/workspace-labels.ts
|
|
28084
|
+
init_errors();
|
|
28085
|
+
function parseLabelList(value) {
|
|
28086
|
+
if (value === void 0 || value === null || value === false) return [];
|
|
28087
|
+
const raw = Array.isArray(value) ? value.map(String) : [String(value)];
|
|
28088
|
+
const labels = raw.flatMap((entry) => entry.split(",")).map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
28089
|
+
if (labels.length === 0 && raw.some((entry) => entry.trim().length > 0)) {
|
|
28090
|
+
throw new CLIError("--labels must name at least one label");
|
|
28091
|
+
}
|
|
28092
|
+
return labels;
|
|
28093
|
+
}
|
|
28094
|
+
|
|
28095
|
+
// src/domains/workspaces.ts
|
|
25959
28096
|
init_output();
|
|
25960
28097
|
init_pagination();
|
|
25961
28098
|
init_context();
|
|
@@ -26770,11 +28907,16 @@ var workspacesDomain = {
|
|
|
26770
28907
|
{
|
|
26771
28908
|
name: "timezone",
|
|
26772
28909
|
description: "IANA time zone (e.g. America/New_York). The create API does not take one, so the command waits for provisioning to finish and then sets it with a follow-up update. Without it the workspace has no timezone and Journey send windows and Routines run in UTC."
|
|
28910
|
+
},
|
|
28911
|
+
{
|
|
28912
|
+
name: "labels",
|
|
28913
|
+
description: "Comma-separated workspace labels to apply right after creation (e.g. production,sponsor-acme). Labels the organization has not used before are created. Webhook endpoints that select on these labels start covering the workspace at once."
|
|
26773
28914
|
}
|
|
26774
28915
|
],
|
|
26775
28916
|
examples: [
|
|
26776
28917
|
'gr workspaces create --org <org-uuid> --name "Front Desk"',
|
|
26777
|
-
'gr workspaces create --org <org-uuid> --name "Front Desk" --timezone America/Chicago'
|
|
28918
|
+
'gr workspaces create --org <org-uuid> --name "Front Desk" --timezone America/Chicago',
|
|
28919
|
+
'gr workspaces create --org <org-uuid> --name "Front Desk" --labels production,sponsor-acme'
|
|
26778
28920
|
],
|
|
26779
28921
|
handler: async ({ ctx, args }) => {
|
|
26780
28922
|
const orgUuid = args.org ?? args["org-uuid"];
|
|
@@ -26782,6 +28924,7 @@ var workspacesDomain = {
|
|
|
26782
28924
|
if (!orgUuid) throw new CLIError("Missing required argument: --org <org-uuid>");
|
|
26783
28925
|
if (!name) throw new CLIError("Missing required argument: --name");
|
|
26784
28926
|
const timezone = typeof args.timezone === "string" ? normalizeIanaTimeZone(args.timezone) : void 0;
|
|
28927
|
+
const labels = parseLabelList(args.labels);
|
|
26785
28928
|
const payload = { name };
|
|
26786
28929
|
if (args.slug) payload.slug = String(args.slug);
|
|
26787
28930
|
if (args.template) payload.templateWorkspaceUuid = String(args.template);
|
|
@@ -26798,6 +28941,18 @@ var workspacesDomain = {
|
|
|
26798
28941
|
}
|
|
26799
28942
|
throw err;
|
|
26800
28943
|
}
|
|
28944
|
+
if (labels.length > 0) {
|
|
28945
|
+
try {
|
|
28946
|
+
await client3.setWorkspaceLabels(orgUuid, result2.uuid, { labels });
|
|
28947
|
+
} catch (err) {
|
|
28948
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
28949
|
+
throw new CLIError(
|
|
28950
|
+
`Workspace ${result2.uuid} was created but its labels were not set: ${reason}
|
|
28951
|
+
Apply them with:
|
|
28952
|
+
gr org workspaces labels set --org ${orgUuid} --workspace-uuid ${result2.uuid} --labels ${labels.join(",")} --allow-write`
|
|
28953
|
+
);
|
|
28954
|
+
}
|
|
28955
|
+
}
|
|
26801
28956
|
if (timezone) {
|
|
26802
28957
|
const wsUuid = result2.uuid;
|
|
26803
28958
|
stderr2(`Waiting for workspace ${wsUuid} to finish provisioning...`);
|
|
@@ -29332,6 +31487,73 @@ function parseIdList(value) {
|
|
|
29332
31487
|
return num;
|
|
29333
31488
|
});
|
|
29334
31489
|
}
|
|
31490
|
+
function toGrantEntry(grant) {
|
|
31491
|
+
return { granteeMemberId: grant.granteeMemberId, accessMode: grant.accessMode };
|
|
31492
|
+
}
|
|
31493
|
+
var SHARING_COLUMNS = [
|
|
31494
|
+
{ header: "ACCESS", getValue: (item) => item.access },
|
|
31495
|
+
{
|
|
31496
|
+
header: "SHAREABLE",
|
|
31497
|
+
getValue: (item) => String(item.shareable ?? "")
|
|
31498
|
+
},
|
|
31499
|
+
{ header: "OWNER", getValue: (item) => String(item.ownerId ?? "") },
|
|
31500
|
+
{ header: "GRANTS", getValue: (item) => String(item.grants.length) },
|
|
31501
|
+
{
|
|
31502
|
+
header: "ROLES",
|
|
31503
|
+
getValue: (item) => (item.roleAssociations ?? []).map((role) => role.memberRoleName).join(", ")
|
|
31504
|
+
}
|
|
31505
|
+
];
|
|
31506
|
+
function sharingCommands(spec) {
|
|
31507
|
+
const { prefix, entityName, getMethod, updateMethod } = spec;
|
|
31508
|
+
const idArg2 = { name: "id", description: `${entityName} ID`, required: true };
|
|
31509
|
+
const cli = ["gr", ...prefix, "sharing"].join(" ");
|
|
31510
|
+
return [
|
|
31511
|
+
{
|
|
31512
|
+
path: [...prefix, "sharing", "get"],
|
|
31513
|
+
description: `Show a ${entityName}'s access level, grants and role associations`,
|
|
31514
|
+
requiresWorkspace: true,
|
|
31515
|
+
args: [idArg2],
|
|
31516
|
+
examples: [`${cli} get -w $WID --id 12`],
|
|
31517
|
+
handler: async ({ ctx, workspace, args }) => {
|
|
31518
|
+
const state = await requireAuth(ctx).apiClient[getMethod](
|
|
31519
|
+
workspace,
|
|
31520
|
+
requireNumber(args, "id")
|
|
31521
|
+
);
|
|
31522
|
+
outputData(state, ctx, SHARING_COLUMNS);
|
|
31523
|
+
}
|
|
31524
|
+
},
|
|
31525
|
+
{
|
|
31526
|
+
path: [...prefix, "sharing", "set"],
|
|
31527
|
+
description: `Change a ${entityName}'s sharing. The API replaces the whole sharing state, so this command reads the current state first and overrides only the keys you pass \u2014 omitting "grants" or "roleAssociations" keeps the existing ones rather than clearing them. Pass them explicitly (e.g. "grants": []) to replace.`,
|
|
31528
|
+
mutates: true,
|
|
31529
|
+
requiresWorkspace: true,
|
|
31530
|
+
args: [idArg2],
|
|
31531
|
+
examples: [
|
|
31532
|
+
`${cli} set -w $WID --id 12 --allow-write -d '{"access":"workspace"}'`,
|
|
31533
|
+
`${cli} set -w $WID --id 12 --allow-write -d '{"access":"private","grants":[]}'`
|
|
31534
|
+
],
|
|
31535
|
+
handler: async ({ ctx, workspace, args, data }) => {
|
|
31536
|
+
if (data === void 0 || data === null || typeof data !== "object") {
|
|
31537
|
+
throw new CLIError(
|
|
31538
|
+
`Provide the fields to change as JSON via --data, --file, or stdin (e.g. '{"access":"workspace"}')`
|
|
31539
|
+
);
|
|
31540
|
+
}
|
|
31541
|
+
const patch = data;
|
|
31542
|
+
const client3 = requireAuth(ctx).apiClient;
|
|
31543
|
+
const id = requireNumber(args, "id");
|
|
31544
|
+
const current = await client3[getMethod](workspace, id);
|
|
31545
|
+
const next = {
|
|
31546
|
+
access: patch.access ?? current.access,
|
|
31547
|
+
shareable: patch.shareable ?? current.shareable ?? null,
|
|
31548
|
+
grants: patch.grants ?? current.grants.map(toGrantEntry),
|
|
31549
|
+
roleAssociations: patch.roleAssociations ?? current.roleAssociations ?? []
|
|
31550
|
+
};
|
|
31551
|
+
const state = await client3[updateMethod](workspace, id, next);
|
|
31552
|
+
outputData(state, ctx, SHARING_COLUMNS);
|
|
31553
|
+
}
|
|
31554
|
+
}
|
|
31555
|
+
];
|
|
31556
|
+
}
|
|
29335
31557
|
var COLUMNS10 = [
|
|
29336
31558
|
COL.id(),
|
|
29337
31559
|
COL.name(),
|
|
@@ -29493,6 +31715,18 @@ ${FILE_FIELD_REFERENCE}`
|
|
|
29493
31715
|
outputData(results, ctx, folderSearchColumns(results));
|
|
29494
31716
|
}
|
|
29495
31717
|
},
|
|
31718
|
+
...sharingCommands({
|
|
31719
|
+
prefix: ["files", "folders"],
|
|
31720
|
+
entityName: "folder",
|
|
31721
|
+
getMethod: "getFolderSharing",
|
|
31722
|
+
updateMethod: "updateFolderSharing"
|
|
31723
|
+
}),
|
|
31724
|
+
...sharingCommands({
|
|
31725
|
+
prefix: ["files"],
|
|
31726
|
+
entityName: "file",
|
|
31727
|
+
getMethod: "getFileSharing",
|
|
31728
|
+
updateMethod: "updateFileSharing"
|
|
31729
|
+
}),
|
|
29496
31730
|
// Labels sub-resource
|
|
29497
31731
|
...crudCommands({
|
|
29498
31732
|
prefix: ["files", "labels"],
|
|
@@ -31414,7 +33648,7 @@ var OBS_COLUMNS = [
|
|
|
31414
33648
|
];
|
|
31415
33649
|
var metricsDomain = {
|
|
31416
33650
|
name: "metrics",
|
|
31417
|
-
description: "Customer-defined outcome metrics (CEL expression or
|
|
33651
|
+
description: "Customer-defined outcome metrics (CEL expression, LLM rubric, Member cohort count, or an aggregate over Form records) with time-series readout",
|
|
31418
33652
|
commands: [
|
|
31419
33653
|
...crudCommands({
|
|
31420
33654
|
prefix: ["metrics"],
|
|
@@ -31427,14 +33661,16 @@ var metricsDomain = {
|
|
|
31427
33661
|
columns: COLUMNS11,
|
|
31428
33662
|
paginationSupport: "full",
|
|
31429
33663
|
createExamples: [
|
|
31430
|
-
`yarn gr metrics create -w $WID --allow-write --data '{"name":"SMS Channel Rate","metricType":"expression","celExpression":"chat.channel == \\"phone-sms\\"","unit":"rate"}'`,
|
|
31431
|
-
`yarn gr metrics create -w $WID --allow-write --data '{"name":"Qualified Engagement","metricType":"rubric","evaluationPrompt":"Did the user show buying intent?","unit":"rate"}'
|
|
33664
|
+
`yarn gr metrics create -w $WID --allow-write --data '{"name":"SMS Channel Rate","metricType":"expression","celExpression":"chat.channel == \\"phone-sms\\"","unit":"rate","workflowIds":[]}'`,
|
|
33665
|
+
`yarn gr metrics create -w $WID --allow-write --data '{"name":"Qualified Engagement","metricType":"rubric","evaluationPrompt":"Did the user show buying intent?","unit":"rate","workflowIds":[]}'`,
|
|
33666
|
+
`yarn gr metrics create -w $WID --allow-write --data '{"name":"HRV daily average","metricType":"record_aggregate","source":"data_record","sourceConfig":{"record":{"dataType":"daily_readings","aggregation":"avg","field":"record.hrv","dateField":"record.measured_on","groupBy":"record.athlete"}},"targetValue":65}'`,
|
|
33667
|
+
`yarn gr metrics create -w $WID --allow-write --data '{"name":"Open lab results","metricType":"record_aggregate","source":"data_record","sourceConfig":{"record":{"dataType":"lab_results","aggregation":"count","where":{"kind":"compare","field":"record.status","op":"eq","value":"open"}}}}'`
|
|
31432
33668
|
],
|
|
31433
|
-
createHelp:
|
|
33669
|
+
createHelp: `Create a metric definition. metricType is expression (CEL) or rubric (LLM) for one reading per chat (pass workflowIds, [] for every workflow); filter_count for the daily size of a saved Member filter (source "member_filter", kind "gauge", sourceConfig.memberFilterId); or record_aggregate for an aggregate over a Form's records, computed from the records each time the series is read (source "data_record", sourceConfig.record). sourceConfig.record takes dataType (Form id or slug), aggregation (count | countDistinct | sum | avg | min | max), field (record.<fieldSlug>; required for all but count, a number field for sum/avg/min/max), dateField (a date or datetime field, default record.createdAt), where (Query IR predicate, see "yarn gr queries syntax") and groupBy (record.<fieldSlug>, one series per value). A record metric needs records:read to save and to read, and records:admin when it names an adminOnly field.`
|
|
31434
33670
|
}),
|
|
31435
33671
|
{
|
|
31436
33672
|
path: ["metrics", "observations"],
|
|
31437
|
-
description: "List raw observations for a metric in a date range (may include PHI reason)",
|
|
33673
|
+
description: "List raw observations for a metric in a date range (may include PHI reason). Not available for record_aggregate metrics, which store none: read their series",
|
|
31438
33674
|
args: [
|
|
31439
33675
|
{ name: "id", required: true, description: "Metric ID" },
|
|
31440
33676
|
{
|
|
@@ -31472,7 +33708,7 @@ var metricsDomain = {
|
|
|
31472
33708
|
},
|
|
31473
33709
|
{
|
|
31474
33710
|
path: ["metrics", "series"],
|
|
31475
|
-
description: "Time-bucketed aggregation for a metric
|
|
33711
|
+
description: "Time-bucketed aggregation for a metric. A record_aggregate metric is computed from its Form records on each call and, with groupBy, also returns one series per group",
|
|
31476
33712
|
args: [
|
|
31477
33713
|
{ name: "id", required: true, description: "Metric ID" },
|
|
31478
33714
|
{
|
|
@@ -31488,7 +33724,7 @@ var metricsDomain = {
|
|
|
31488
33724
|
{ name: "bucket", description: "day | week (default day)" },
|
|
31489
33725
|
{
|
|
31490
33726
|
name: "aggregation",
|
|
31491
|
-
description: "avg | sum | count | rate | last | passes (default varies by metric)"
|
|
33727
|
+
description: "avg | sum | count | rate | last | passes (default varies by metric). Omit for a record_aggregate metric: its definition names the aggregation"
|
|
31492
33728
|
}
|
|
31493
33729
|
],
|
|
31494
33730
|
requiresWorkspace: true,
|
|
@@ -31668,8 +33904,10 @@ function buildModelEvalBatchJobs(scenarios, models, rounds, warmup, realtimeMode
|
|
|
31668
33904
|
var REALTIME_AUDIO_USD_PER_MIN = {
|
|
31669
33905
|
"xai:realtime:voice-agent": 0.05,
|
|
31670
33906
|
// Grok Voice Think Fast 1
|
|
31671
|
-
"xai:realtime:voice-agent-2": 0.08
|
|
31672
|
-
// Grok Voice Think Fast 2
|
|
33907
|
+
"xai:realtime:voice-agent-2": 0.08,
|
|
33908
|
+
// Grok Voice Think Fast 2 (pinned grok-voice-2.0)
|
|
33909
|
+
"xai:realtime:voice-agent-3": 0.08
|
|
33910
|
+
// Grok Voice 3.0 — same audio rate as 2.0
|
|
31673
33911
|
};
|
|
31674
33912
|
var DEFAULT_REALTIME_AUDIO_USD_PER_MIN = 0.08;
|
|
31675
33913
|
var EST_AUDIO_MIN_PER_RUN = 3;
|
|
@@ -32499,6 +34737,91 @@ var qualificationsDomain = {
|
|
|
32499
34737
|
]
|
|
32500
34738
|
};
|
|
32501
34739
|
|
|
34740
|
+
// src/domains/data-reports.ts
|
|
34741
|
+
init_output();
|
|
34742
|
+
init_context();
|
|
34743
|
+
init_errors();
|
|
34744
|
+
init_config();
|
|
34745
|
+
function parseRecordScope(value) {
|
|
34746
|
+
if (value === void 0) return void 0;
|
|
34747
|
+
if (value === "currentMember" || value === "allRecords") return value;
|
|
34748
|
+
throw new CLIError("--record-scope must be currentMember or allRecords");
|
|
34749
|
+
}
|
|
34750
|
+
function parseParameters(value) {
|
|
34751
|
+
if (value === void 0) return void 0;
|
|
34752
|
+
let parsed;
|
|
34753
|
+
try {
|
|
34754
|
+
parsed = typeof value === "string" ? JSON.parse(value) : value;
|
|
34755
|
+
} catch {
|
|
34756
|
+
throw new CLIError("--parameters must be a JSON object");
|
|
34757
|
+
}
|
|
34758
|
+
if (!isRecord(parsed)) throw new CLIError("--parameters must be a JSON object");
|
|
34759
|
+
const values = {};
|
|
34760
|
+
for (const [name, parameter] of Object.entries(parsed)) {
|
|
34761
|
+
if (typeof parameter !== "boolean" && typeof parameter !== "number" && typeof parameter !== "string") {
|
|
34762
|
+
throw new CLIError(`--parameters value for '${name}' must be a boolean, number or string`);
|
|
34763
|
+
}
|
|
34764
|
+
values[name] = parameter;
|
|
34765
|
+
}
|
|
34766
|
+
return values;
|
|
34767
|
+
}
|
|
34768
|
+
function buildPreviewRequest(data, args) {
|
|
34769
|
+
if (!isRecord(data)) {
|
|
34770
|
+
throw new CLIError("Report JSON required (--data, --file, or stdin)");
|
|
34771
|
+
}
|
|
34772
|
+
let request;
|
|
34773
|
+
if ("report" in data) {
|
|
34774
|
+
if (!isRecord(data.report)) {
|
|
34775
|
+
throw new CLIError("The request's 'report' must be a JSON object");
|
|
34776
|
+
}
|
|
34777
|
+
request = { ...data };
|
|
34778
|
+
} else if ("dataTypeUuid" in data && "query" in data) {
|
|
34779
|
+
request = { report: data };
|
|
34780
|
+
} else {
|
|
34781
|
+
throw new CLIError(
|
|
34782
|
+
"Body must be a request with a 'report' object, or a bare report with dataTypeUuid and query"
|
|
34783
|
+
);
|
|
34784
|
+
}
|
|
34785
|
+
const recordScope = parseRecordScope(args["record-scope"]);
|
|
34786
|
+
if (recordScope) request.recordScope = recordScope;
|
|
34787
|
+
const parameters = parseParameters(args["parameters"]);
|
|
34788
|
+
if (parameters) request.parameters = parameters;
|
|
34789
|
+
return request;
|
|
34790
|
+
}
|
|
34791
|
+
var dataReportsDomain = {
|
|
34792
|
+
name: "data-reports",
|
|
34793
|
+
description: "Form Reports: preview a report as the Agent would run it",
|
|
34794
|
+
commands: [
|
|
34795
|
+
{
|
|
34796
|
+
path: ["data-reports", "preview"],
|
|
34797
|
+
description: "Run a Form Reports report, saved or not, as the signed-in Member and show the rows or groups the Agent would get. Rows return at most 50 per call and aggregates at most 200 groups. Needs the agents:write and records:read scopes.",
|
|
34798
|
+
requiresWorkspace: true,
|
|
34799
|
+
acceptsJsonInput: true,
|
|
34800
|
+
args: [
|
|
34801
|
+
{
|
|
34802
|
+
name: "record-scope",
|
|
34803
|
+
description: "currentMember (default) limits the report to the signed-in Member's records; allRecords covers every record that Member may read",
|
|
34804
|
+
required: false
|
|
34805
|
+
},
|
|
34806
|
+
{
|
|
34807
|
+
name: "parameters",
|
|
34808
|
+
description: `Parameter values as a JSON object, e.g. '{"days":7}'. Omitted parameters use their defaults`,
|
|
34809
|
+
required: false
|
|
34810
|
+
}
|
|
34811
|
+
],
|
|
34812
|
+
examples: [
|
|
34813
|
+
`yarn gr data-reports preview -w $UUID --record-scope allRecords --parameters '{"days":7}' --file report.json`,
|
|
34814
|
+
`yarn gr data-reports preview -w $UUID --data '{"report":{"name":"recent","description":"Latest rows","dataTypeUuid":"<form uuid>","query":{"sort":[{"field":"record.createdAt","dir":"desc"}],"limit":5}},"recordScope":"allRecords"}'`
|
|
34815
|
+
],
|
|
34816
|
+
handler: async ({ ctx, workspace, args, data }) => {
|
|
34817
|
+
const request = buildPreviewRequest(data, args);
|
|
34818
|
+
const result2 = await requireAuth(ctx).apiClient.previewDataReport(workspace, request);
|
|
34819
|
+
outputSingle(result2, ctx);
|
|
34820
|
+
}
|
|
34821
|
+
}
|
|
34822
|
+
]
|
|
34823
|
+
};
|
|
34824
|
+
|
|
32502
34825
|
// src/domains/queries.ts
|
|
32503
34826
|
init_output();
|
|
32504
34827
|
init_context();
|
|
@@ -33431,6 +35754,9 @@ var abilitiesDomain = {
|
|
|
33431
35754
|
description: "Allow creation before required app connections are configured"
|
|
33432
35755
|
}
|
|
33433
35756
|
],
|
|
35757
|
+
examples: [
|
|
35758
|
+
'yarn gr abilities enable --ability-type integration:data_reports --workflow-id 12 -w $UUID --data \'{"recordScope":"currentMember","reports":[{"name":"recent_entries","description":"The latest entries for this Member","dataTypeUuid":"<form uuid>","query":{"sort":[{"field":"record.createdAt","dir":"desc"}],"limit":5}}]}\' # Form Reports: no app editor; try a report first with `yarn gr data-reports preview`'
|
|
35759
|
+
],
|
|
33434
35760
|
handler: async ({ ctx, workspace, args, data }) => {
|
|
33435
35761
|
const abilityType = args["ability-type"];
|
|
33436
35762
|
if (typeof abilityType !== "string") throw new CLIError("--ability-type is required");
|
|
@@ -33950,7 +36276,8 @@ var NO_UUID_LOOKUP = /* @__PURE__ */ new Set([
|
|
|
33950
36276
|
"import",
|
|
33951
36277
|
"invoice",
|
|
33952
36278
|
"workspace_config",
|
|
33953
|
-
"data_record"
|
|
36279
|
+
"data_record",
|
|
36280
|
+
"recording"
|
|
33954
36281
|
]);
|
|
33955
36282
|
var HYDRATORS = {
|
|
33956
36283
|
workspace: async ({ client: client3 }, ref) => (await client3.getWorkspace(ref.uuid)).name,
|
|
@@ -34783,7 +37110,7 @@ var aiModelsDomain = {
|
|
|
34783
37110
|
},
|
|
34784
37111
|
{
|
|
34785
37112
|
path: ["ai-models", "realtime"],
|
|
34786
|
-
description: "List realtime/voice stacks (use as realtimeModelId). e.g. xai:realtime:voice-agent-2 = Grok Voice Think Fast 2",
|
|
37113
|
+
description: "List realtime/voice stacks (use as realtimeModelId). e.g. xai:realtime:voice-agent-2 = Grok Voice Think Fast 2 (default); xai:realtime:voice-agent-3 = Grok Voice 3.0 (explicit opt-in)",
|
|
34787
37114
|
requiresWorkspace: false,
|
|
34788
37115
|
handler: async ({ ctx }) => {
|
|
34789
37116
|
const result2 = await requireAuth(ctx).apiClient.getRealtimeModels();
|
|
@@ -36331,6 +38658,7 @@ init_dist();
|
|
|
36331
38658
|
init_context();
|
|
36332
38659
|
init_errors();
|
|
36333
38660
|
init_output();
|
|
38661
|
+
init_pagination();
|
|
36334
38662
|
var ORG_COLUMNS = [
|
|
36335
38663
|
{ header: "ID", getValue: (item) => String(item.organizationId ?? "") },
|
|
36336
38664
|
{ header: "NAME", getValue: (item) => item.organizationName || "" },
|
|
@@ -36936,6 +39264,17 @@ var ORG_WEBHOOK_COLUMNS = [
|
|
|
36936
39264
|
header: "WORKSPACES",
|
|
36937
39265
|
getValue: (item) => item.limitedToWorkspaces ? item.workspaceUuids.join(",") : "all (organization-wide)",
|
|
36938
39266
|
maxWidth: 80
|
|
39267
|
+
},
|
|
39268
|
+
{
|
|
39269
|
+
// A workspace is covered when it carries ALL of these labels (in
|
|
39270
|
+
// addition to the explicit WORKSPACES).
|
|
39271
|
+
header: "LABELS",
|
|
39272
|
+
getValue: (item) => (item.labelSelector ?? []).map((label) => label.slug).join("+"),
|
|
39273
|
+
maxWidth: 60
|
|
39274
|
+
},
|
|
39275
|
+
{
|
|
39276
|
+
header: "RECENT FAILURES",
|
|
39277
|
+
getValue: (item) => (item.recentFailures ?? []).map((failure) => `${failure.failureClass} (${failure.count})`).join(", ")
|
|
36939
39278
|
}
|
|
36940
39279
|
];
|
|
36941
39280
|
function requireWebhookEndpointUuid(args) {
|
|
@@ -36970,9 +39309,298 @@ function webhookStatusCommand(action) {
|
|
|
36970
39309
|
}
|
|
36971
39310
|
};
|
|
36972
39311
|
}
|
|
39312
|
+
var ORG_WORKSPACE_COLUMNS = [
|
|
39313
|
+
{ header: "UUID", getValue: (item) => item.uuid },
|
|
39314
|
+
{ header: "NAME", getValue: (item) => item.name, maxWidth: 40 },
|
|
39315
|
+
{ header: "SLUG", getValue: (item) => item.slug },
|
|
39316
|
+
{ header: "STATUS", getValue: (item) => String(item.status) },
|
|
39317
|
+
{ header: "TIMEZONE", getValue: (item) => item.timezone ?? "-" },
|
|
39318
|
+
{ header: "CREATED", getValue: (item) => item.createdAt }
|
|
39319
|
+
];
|
|
39320
|
+
var orgWorkspaceCommands = [
|
|
39321
|
+
{
|
|
39322
|
+
path: ["org", "workspaces", "list"],
|
|
39323
|
+
description: "List every workspace in an organization, newest page first (read-only). Prefer this over `gr workspaces list --org` for anything fleet-wide: that command reads an unpaginated endpoint and sees only the first page of workspaces. Use --all to fetch the complete list.",
|
|
39324
|
+
requiresWorkspace: false,
|
|
39325
|
+
args: [
|
|
39326
|
+
ORG_UUID_ARG2,
|
|
39327
|
+
{ name: "page", description: "Page number (default: 1)" },
|
|
39328
|
+
{ name: "page-size", description: "Page size" },
|
|
39329
|
+
{ name: "all", description: "Fetch all pages", isFlag: true },
|
|
39330
|
+
{ name: "search", description: "Filter by name or slug (server-side)" }
|
|
39331
|
+
],
|
|
39332
|
+
examples: [
|
|
39333
|
+
"yarn gr org workspaces list --org $ORG_UUID --all",
|
|
39334
|
+
"yarn gr org workspaces list --org $ORG_UUID --search gastro -o json"
|
|
39335
|
+
],
|
|
39336
|
+
handler: async (hctx) => {
|
|
39337
|
+
const orgRef = requireOrgRef(hctx.args);
|
|
39338
|
+
const pag = parsePaginationArgs(hctx.args);
|
|
39339
|
+
const search = typeof hctx.args.search === "string" ? hctx.args.search : void 0;
|
|
39340
|
+
const client3 = requireAuth(hctx.ctx).apiClient;
|
|
39341
|
+
if (pag.all) {
|
|
39342
|
+
const allItems = await fetchAllPages(
|
|
39343
|
+
({ page, pageSize }) => client3.getOrganizationWorkspaces(orgRef, {
|
|
39344
|
+
page,
|
|
39345
|
+
pageSize,
|
|
39346
|
+
...search ? { search } : {}
|
|
39347
|
+
})
|
|
39348
|
+
);
|
|
39349
|
+
outputData(allItems, hctx.ctx, ORG_WORKSPACE_COLUMNS);
|
|
39350
|
+
return;
|
|
39351
|
+
}
|
|
39352
|
+
const options = {};
|
|
39353
|
+
if (pag.page) options.page = pag.page;
|
|
39354
|
+
if (pag.pageSize) options.pageSize = pag.pageSize;
|
|
39355
|
+
if (search) options.search = search;
|
|
39356
|
+
const result2 = await client3.getOrganizationWorkspaces(orgRef, options);
|
|
39357
|
+
outputData(listResult(result2, true), hctx.ctx, ORG_WORKSPACE_COLUMNS);
|
|
39358
|
+
}
|
|
39359
|
+
}
|
|
39360
|
+
];
|
|
39361
|
+
function requireArg2(args, name) {
|
|
39362
|
+
const value = args[name];
|
|
39363
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
39364
|
+
throw new CLIError(`Missing required argument: --${name}`);
|
|
39365
|
+
}
|
|
39366
|
+
return value.trim();
|
|
39367
|
+
}
|
|
39368
|
+
function optionalArg(args, name) {
|
|
39369
|
+
const value = args[name];
|
|
39370
|
+
if (value === void 0) return void 0;
|
|
39371
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
39372
|
+
throw new CLIError(`Invalid argument: --${name}`);
|
|
39373
|
+
}
|
|
39374
|
+
return value.trim();
|
|
39375
|
+
}
|
|
39376
|
+
var DELIVERY_LOG_COLUMNS = [
|
|
39377
|
+
{ header: "EVENT", getValue: (item) => item.eventType },
|
|
39378
|
+
{ header: "STATUS", getValue: (item) => item.status },
|
|
39379
|
+
{ header: "DEDUPE KEY", getValue: (item) => item.dedupeKey, maxWidth: 48 },
|
|
39380
|
+
{ header: "OCCURRED", getValue: (item) => item.occurredAt },
|
|
39381
|
+
{ header: "ATTEMPTS", getValue: (item) => String(item.attempts) },
|
|
39382
|
+
{ header: "LAST FAILURE", getValue: (item) => item.lastFailureClass || "\u2014" }
|
|
39383
|
+
];
|
|
36973
39384
|
var webhookCommands = [
|
|
36974
39385
|
webhookStatusCommand("pause"),
|
|
36975
39386
|
webhookStatusCommand("resume"),
|
|
39387
|
+
{
|
|
39388
|
+
path: ["org", "webhooks", "create"],
|
|
39389
|
+
description: "Create an organization webhook endpoint. The signing secret is printed once in this response and is not shown again. Requires organization admin access.",
|
|
39390
|
+
mutates: true,
|
|
39391
|
+
requiresWorkspace: false,
|
|
39392
|
+
args: [
|
|
39393
|
+
ORG_UUID_ARG2,
|
|
39394
|
+
{ name: "name", description: "Endpoint name", required: true },
|
|
39395
|
+
{ name: "url", description: "HTTPS endpoint URL", required: true },
|
|
39396
|
+
{
|
|
39397
|
+
name: "event-type",
|
|
39398
|
+
description: "Subscribed event type (repeat for more than one)",
|
|
39399
|
+
required: true,
|
|
39400
|
+
repeatable: true
|
|
39401
|
+
},
|
|
39402
|
+
{
|
|
39403
|
+
name: "workspace-uuid",
|
|
39404
|
+
description: "Limit coverage to this workspace (repeatable). Omit to cover every workspace in the organization.",
|
|
39405
|
+
repeatable: true
|
|
39406
|
+
},
|
|
39407
|
+
{
|
|
39408
|
+
name: "signing-secret",
|
|
39409
|
+
description: "Client-supplied signing secret. Omit to have one generated."
|
|
39410
|
+
}
|
|
39411
|
+
],
|
|
39412
|
+
examples: [
|
|
39413
|
+
'yarn gr org webhooks create --org $ORG_UUID --name "Rysun" --url https://example.com/hook --event-type data_record.created --allow-write'
|
|
39414
|
+
],
|
|
39415
|
+
handler: async (hctx) => {
|
|
39416
|
+
const eventTypes = repeatedValues(hctx.args, "event-type");
|
|
39417
|
+
if (eventTypes.length === 0) {
|
|
39418
|
+
throw new CLIError("Missing required argument: --event-type");
|
|
39419
|
+
}
|
|
39420
|
+
const signingSecret = optionalArg(hctx.args, "signing-secret");
|
|
39421
|
+
const created = await requireAuth(hctx.ctx).apiClient.createOrgWebhookEndpoint(
|
|
39422
|
+
requireOrgRef(hctx.args),
|
|
39423
|
+
{
|
|
39424
|
+
name: requireArg2(hctx.args, "name"),
|
|
39425
|
+
url: requireArg2(hctx.args, "url"),
|
|
39426
|
+
eventTypes,
|
|
39427
|
+
workspaceUuids: repeatedValues(hctx.args, "workspace-uuid"),
|
|
39428
|
+
...signingSecret ? { signingSecret } : {}
|
|
39429
|
+
}
|
|
39430
|
+
);
|
|
39431
|
+
hint(hctx.ctx, ["Signing secret is in this response and is not shown again."]);
|
|
39432
|
+
outputSingle(created, hctx.ctx);
|
|
39433
|
+
}
|
|
39434
|
+
},
|
|
39435
|
+
{
|
|
39436
|
+
path: ["org", "webhooks", "update"],
|
|
39437
|
+
description: "Update an organization webhook endpoint. A rotated signing secret is not echoed. Requires organization admin access.",
|
|
39438
|
+
mutates: true,
|
|
39439
|
+
requiresWorkspace: false,
|
|
39440
|
+
args: [
|
|
39441
|
+
ORG_UUID_ARG2,
|
|
39442
|
+
{ name: "endpoint-uuid", aliases: ["id"], description: "Endpoint UUID", required: true },
|
|
39443
|
+
{ name: "name", description: "New endpoint name" },
|
|
39444
|
+
{ name: "url", description: "New HTTPS endpoint URL" },
|
|
39445
|
+
{
|
|
39446
|
+
name: "event-type",
|
|
39447
|
+
description: "Replace the subscription list (repeat for more than one)",
|
|
39448
|
+
repeatable: true
|
|
39449
|
+
},
|
|
39450
|
+
{
|
|
39451
|
+
name: "workspace-uuid",
|
|
39452
|
+
description: "Replace workspace coverage with this workspace (repeatable)",
|
|
39453
|
+
repeatable: true
|
|
39454
|
+
},
|
|
39455
|
+
{
|
|
39456
|
+
name: "all-workspaces",
|
|
39457
|
+
description: "Cover every workspace in the organization",
|
|
39458
|
+
isFlag: true
|
|
39459
|
+
},
|
|
39460
|
+
{ name: "status", description: "active or paused" },
|
|
39461
|
+
{
|
|
39462
|
+
name: "signing-secret",
|
|
39463
|
+
description: "Rotate the signing secret. The new value is not printed."
|
|
39464
|
+
}
|
|
39465
|
+
],
|
|
39466
|
+
examples: [
|
|
39467
|
+
"yarn gr org webhooks update --org $ORG_UUID --endpoint-uuid $ENDPOINT_UUID --status paused --allow-write"
|
|
39468
|
+
],
|
|
39469
|
+
handler: async (hctx) => {
|
|
39470
|
+
const workspaceUuids = repeatedValues(hctx.args, "workspace-uuid");
|
|
39471
|
+
const allWorkspaces = hctx.args["all-workspaces"] === true;
|
|
39472
|
+
if (allWorkspaces && workspaceUuids.length > 0) {
|
|
39473
|
+
throw new CLIError("Pass either --all-workspaces or --workspace-uuid, not both");
|
|
39474
|
+
}
|
|
39475
|
+
const eventTypes = repeatedValues(hctx.args, "event-type");
|
|
39476
|
+
const status = optionalArg(hctx.args, "status");
|
|
39477
|
+
if (status !== void 0 && status !== "active" && status !== "paused") {
|
|
39478
|
+
throw new CLIError("--status must be active or paused");
|
|
39479
|
+
}
|
|
39480
|
+
const signingSecret = optionalArg(hctx.args, "signing-secret");
|
|
39481
|
+
const data = {};
|
|
39482
|
+
const name = optionalArg(hctx.args, "name");
|
|
39483
|
+
const url = optionalArg(hctx.args, "url");
|
|
39484
|
+
if (name) data.name = name;
|
|
39485
|
+
if (url) data.url = url;
|
|
39486
|
+
if (eventTypes.length > 0) data.eventTypes = eventTypes;
|
|
39487
|
+
if (allWorkspaces) data.workspaceUuids = [];
|
|
39488
|
+
else if (workspaceUuids.length > 0) data.workspaceUuids = workspaceUuids;
|
|
39489
|
+
if (status) data.status = status;
|
|
39490
|
+
if (signingSecret) data.signingSecret = signingSecret;
|
|
39491
|
+
if (Object.keys(data).length === 0) {
|
|
39492
|
+
throw new CLIError("Nothing to update");
|
|
39493
|
+
}
|
|
39494
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.updateOrgWebhookEndpoint(
|
|
39495
|
+
requireOrgRef(hctx.args),
|
|
39496
|
+
requireWebhookEndpointUuid(hctx.args),
|
|
39497
|
+
data
|
|
39498
|
+
);
|
|
39499
|
+
const { signingSecret: _rotatedSecret, ...printable } = result2;
|
|
39500
|
+
outputSingle(printable, hctx.ctx, ORG_WEBHOOK_COLUMNS);
|
|
39501
|
+
}
|
|
39502
|
+
},
|
|
39503
|
+
{
|
|
39504
|
+
path: ["org", "webhooks", "test-send"],
|
|
39505
|
+
description: "Send one test payload to an endpoint. Writes no delivery row. Requires organization admin access.",
|
|
39506
|
+
mutates: true,
|
|
39507
|
+
requiresWorkspace: false,
|
|
39508
|
+
args: [
|
|
39509
|
+
ORG_UUID_ARG2,
|
|
39510
|
+
{ name: "endpoint-uuid", aliases: ["id"], description: "Endpoint UUID", required: true },
|
|
39511
|
+
{ name: "event-type", description: "Event type to send", required: true },
|
|
39512
|
+
{
|
|
39513
|
+
name: "payload",
|
|
39514
|
+
description: "JSON object to send instead of the server sample"
|
|
39515
|
+
}
|
|
39516
|
+
],
|
|
39517
|
+
examples: [
|
|
39518
|
+
"yarn gr org webhooks test-send --org $ORG_UUID --endpoint-uuid $ENDPOINT_UUID --event-type data_record.created --allow-write"
|
|
39519
|
+
],
|
|
39520
|
+
handler: async (hctx) => {
|
|
39521
|
+
const rawPayload = optionalArg(hctx.args, "payload");
|
|
39522
|
+
let payload;
|
|
39523
|
+
if (rawPayload !== void 0) {
|
|
39524
|
+
let parsed;
|
|
39525
|
+
try {
|
|
39526
|
+
parsed = JSON.parse(rawPayload);
|
|
39527
|
+
} catch {
|
|
39528
|
+
throw new CLIError("--payload must be a JSON object");
|
|
39529
|
+
}
|
|
39530
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
39531
|
+
throw new CLIError("--payload must be a JSON object");
|
|
39532
|
+
}
|
|
39533
|
+
payload = parsed;
|
|
39534
|
+
}
|
|
39535
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.testOrgWebhookEndpoint(
|
|
39536
|
+
requireOrgRef(hctx.args),
|
|
39537
|
+
requireWebhookEndpointUuid(hctx.args),
|
|
39538
|
+
{
|
|
39539
|
+
eventType: requireArg2(hctx.args, "event-type"),
|
|
39540
|
+
...payload ? { payload } : {}
|
|
39541
|
+
}
|
|
39542
|
+
);
|
|
39543
|
+
outputSingle(result2, hctx.ctx);
|
|
39544
|
+
}
|
|
39545
|
+
},
|
|
39546
|
+
{
|
|
39547
|
+
path: ["org", "webhooks", "deliveries"],
|
|
39548
|
+
description: "Delivery log for one organization webhook endpoint. Event type, status, dedupe key, occurred-at, attempt count, and last failure class. The event envelope is not printed.",
|
|
39549
|
+
requiresWorkspace: false,
|
|
39550
|
+
args: [
|
|
39551
|
+
ORG_UUID_ARG2,
|
|
39552
|
+
{ name: "endpoint-uuid", aliases: ["id"], description: "Endpoint UUID", required: true },
|
|
39553
|
+
{ name: "limit", description: "Page size (default 50)" }
|
|
39554
|
+
],
|
|
39555
|
+
examples: ["yarn gr org webhooks deliveries --org $ORG_UUID --endpoint-uuid $ENDPOINT_UUID"],
|
|
39556
|
+
handler: async (hctx) => {
|
|
39557
|
+
const limitRaw = optionalArg(hctx.args, "limit");
|
|
39558
|
+
let limit = 50;
|
|
39559
|
+
if (limitRaw !== void 0) {
|
|
39560
|
+
limit = Number(limitRaw);
|
|
39561
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
39562
|
+
throw new CLIError("--limit must be a positive integer");
|
|
39563
|
+
}
|
|
39564
|
+
}
|
|
39565
|
+
const page = await requireAuth(hctx.ctx).apiClient.listOrgWebhookEndpointDeliveries(
|
|
39566
|
+
requireOrgRef(hctx.args),
|
|
39567
|
+
requireWebhookEndpointUuid(hctx.args),
|
|
39568
|
+
limit
|
|
39569
|
+
);
|
|
39570
|
+
const rows = page.items.map((item) => {
|
|
39571
|
+
const latest = item.attempts.at(-1);
|
|
39572
|
+
return {
|
|
39573
|
+
eventType: item.eventType,
|
|
39574
|
+
status: item.status,
|
|
39575
|
+
dedupeKey: item.dedupeKey,
|
|
39576
|
+
occurredAt: item.occurredAt,
|
|
39577
|
+
attempts: item.attempts.length,
|
|
39578
|
+
lastFailureClass: latest?.failureClass ?? latest?.errorType ?? ""
|
|
39579
|
+
};
|
|
39580
|
+
});
|
|
39581
|
+
outputData(rows, hctx.ctx, DELIVERY_LOG_COLUMNS);
|
|
39582
|
+
}
|
|
39583
|
+
},
|
|
39584
|
+
{
|
|
39585
|
+
path: ["org", "webhooks", "discard-pending"],
|
|
39586
|
+
description: "Expire a paused or disabled endpoint's pending deliveries so a resume does not re-send a backlog the receiver keeps rejecting. Dead-lettered deliveries are untouched; expired ones stay replayable. Requires organization admin access.",
|
|
39587
|
+
mutates: true,
|
|
39588
|
+
requiresWorkspace: false,
|
|
39589
|
+
args: [
|
|
39590
|
+
ORG_UUID_ARG2,
|
|
39591
|
+
{ name: "endpoint-uuid", aliases: ["id"], description: "Endpoint UUID", required: true }
|
|
39592
|
+
],
|
|
39593
|
+
examples: [
|
|
39594
|
+
"yarn gr org webhooks discard-pending --org $ORG_UUID --endpoint-uuid $ENDPOINT_UUID --allow-write"
|
|
39595
|
+
],
|
|
39596
|
+
handler: async (hctx) => {
|
|
39597
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.discardPendingOrgWebhookDeliveries(
|
|
39598
|
+
requireOrgRef(hctx.args),
|
|
39599
|
+
requireWebhookEndpointUuid(hctx.args)
|
|
39600
|
+
);
|
|
39601
|
+
outputSingle(result2, hctx.ctx);
|
|
39602
|
+
}
|
|
39603
|
+
},
|
|
36976
39604
|
{
|
|
36977
39605
|
path: ["org", "webhooks", "list"],
|
|
36978
39606
|
description: "List an organization's webhook endpoints (read-only). Each row carries the destination host fingerprint and a masked signing secret, never the URL or a usable secret.",
|
|
@@ -37005,9 +39633,93 @@ var webhookCommands = [
|
|
|
37005
39633
|
}
|
|
37006
39634
|
}
|
|
37007
39635
|
];
|
|
39636
|
+
var WORKSPACE_LABEL_COLUMNS = [
|
|
39637
|
+
{ header: "SLUG", getValue: (item) => item.slug },
|
|
39638
|
+
{ header: "NAME", getValue: (item) => item.name },
|
|
39639
|
+
{ header: "WORKSPACES", getValue: (item) => String(item.workspaceCount) },
|
|
39640
|
+
{ header: "WEBHOOK SELECTORS", getValue: (item) => String(item.webhookSelectorCount) },
|
|
39641
|
+
{ header: "UUID", getValue: (item) => item.uuid }
|
|
39642
|
+
];
|
|
39643
|
+
var LABEL_SUMMARY_COLUMNS = [
|
|
39644
|
+
{ header: "SLUG", getValue: (item) => item.slug },
|
|
39645
|
+
{ header: "NAME", getValue: (item) => item.name },
|
|
39646
|
+
{ header: "UUID", getValue: (item) => item.uuid }
|
|
39647
|
+
];
|
|
39648
|
+
function requireWorkspaceUuidArg(args) {
|
|
39649
|
+
const value = args["workspace-uuid"] ?? args.workspace;
|
|
39650
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
39651
|
+
throw new CLIError("Missing required argument: --workspace-uuid");
|
|
39652
|
+
}
|
|
39653
|
+
return value.trim();
|
|
39654
|
+
}
|
|
39655
|
+
var WORKSPACE_UUID_ARG = {
|
|
39656
|
+
name: "workspace-uuid",
|
|
39657
|
+
aliases: ["workspace"],
|
|
39658
|
+
description: "Workspace UUID (a workspace of this organization)",
|
|
39659
|
+
required: true
|
|
39660
|
+
};
|
|
39661
|
+
var workspaceLabelCommands = [
|
|
39662
|
+
{
|
|
39663
|
+
path: ["org", "labels", "list"],
|
|
39664
|
+
description: "List the organization's workspace labels, with how many workspaces carry each and how many webhook label selectors require it",
|
|
39665
|
+
requiresWorkspace: false,
|
|
39666
|
+
args: [ORG_UUID_ARG2],
|
|
39667
|
+
examples: ["yarn gr org labels list --org $ORG_UUID -o json"],
|
|
39668
|
+
handler: async (hctx) => {
|
|
39669
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.listWorkspaceLabels(
|
|
39670
|
+
requireOrgRef(hctx.args)
|
|
39671
|
+
);
|
|
39672
|
+
outputData(result2, hctx.ctx, WORKSPACE_LABEL_COLUMNS);
|
|
39673
|
+
}
|
|
39674
|
+
},
|
|
39675
|
+
{
|
|
39676
|
+
path: ["org", "workspaces", "labels", "get"],
|
|
39677
|
+
description: "Show the labels one workspace of the organization carries",
|
|
39678
|
+
requiresWorkspace: false,
|
|
39679
|
+
args: [ORG_UUID_ARG2, WORKSPACE_UUID_ARG],
|
|
39680
|
+
examples: [
|
|
39681
|
+
"yarn gr org workspaces labels get --org $ORG_UUID --workspace-uuid $WORKSPACE_UUID -o json"
|
|
39682
|
+
],
|
|
39683
|
+
handler: async (hctx) => {
|
|
39684
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.getWorkspaceLabels(
|
|
39685
|
+
requireOrgRef(hctx.args),
|
|
39686
|
+
requireWorkspaceUuidArg(hctx.args)
|
|
39687
|
+
);
|
|
39688
|
+
outputData(result2.labels, hctx.ctx, LABEL_SUMMARY_COLUMNS);
|
|
39689
|
+
}
|
|
39690
|
+
},
|
|
39691
|
+
{
|
|
39692
|
+
path: ["org", "workspaces", "labels", "set"],
|
|
39693
|
+
description: "Replace a workspace's labels with exactly the given set. Requires organization admin access. Labels the organization has not used before are created. Webhook endpoints selecting on these labels start or stop covering the workspace immediately.",
|
|
39694
|
+
mutates: true,
|
|
39695
|
+
requiresWorkspace: false,
|
|
39696
|
+
args: [
|
|
39697
|
+
ORG_UUID_ARG2,
|
|
39698
|
+
WORKSPACE_UUID_ARG,
|
|
39699
|
+
{
|
|
39700
|
+
name: "labels",
|
|
39701
|
+
description: "Comma-separated label slugs; pass an empty string to remove all labels",
|
|
39702
|
+
required: true
|
|
39703
|
+
}
|
|
39704
|
+
],
|
|
39705
|
+
examples: [
|
|
39706
|
+
"yarn gr org workspaces labels set --org $ORG_UUID --workspace-uuid $WORKSPACE_UUID --labels production,sponsor-acme --allow-write"
|
|
39707
|
+
],
|
|
39708
|
+
handler: async (hctx) => {
|
|
39709
|
+
const raw = hctx.args.labels;
|
|
39710
|
+
if (raw === void 0) throw new CLIError("Missing required argument: --labels");
|
|
39711
|
+
const result2 = await requireAuth(hctx.ctx).apiClient.setWorkspaceLabels(
|
|
39712
|
+
requireOrgRef(hctx.args),
|
|
39713
|
+
requireWorkspaceUuidArg(hctx.args),
|
|
39714
|
+
{ labels: raw === "" ? [] : parseLabelList(raw) }
|
|
39715
|
+
);
|
|
39716
|
+
outputData(result2.labels, hctx.ctx, LABEL_SUMMARY_COLUMNS);
|
|
39717
|
+
}
|
|
39718
|
+
}
|
|
39719
|
+
];
|
|
37008
39720
|
var orgDomain = {
|
|
37009
39721
|
name: "org",
|
|
37010
|
-
description: "Organization membership, domains, and
|
|
39722
|
+
description: "Organization membership, domains, webhook endpoints, and workspace labels",
|
|
37011
39723
|
commands: [
|
|
37012
39724
|
{
|
|
37013
39725
|
path: ["org", "list"],
|
|
@@ -37032,7 +39744,9 @@ var orgDomain = {
|
|
|
37032
39744
|
}
|
|
37033
39745
|
},
|
|
37034
39746
|
...domainCommands,
|
|
39747
|
+
...orgWorkspaceCommands,
|
|
37035
39748
|
...webhookCommands,
|
|
39749
|
+
...workspaceLabelCommands,
|
|
37036
39750
|
orgMemberUpdateCommand()
|
|
37037
39751
|
]
|
|
37038
39752
|
};
|
|
@@ -40402,6 +43116,71 @@ var ENCOUNTER_RUN_COLUMNS = [
|
|
|
40402
43116
|
getValue: (item) => summarizeReasons(item.attribution?.collections, "errorReasonCounts")
|
|
40403
43117
|
}
|
|
40404
43118
|
];
|
|
43119
|
+
var ONBOARDING_START_COLUMNS = [
|
|
43120
|
+
{ header: "MODE", getValue: (item) => item.mode ?? "" },
|
|
43121
|
+
{ header: "WORKFLOW ID", getValue: (item) => item.workflowId ?? "" },
|
|
43122
|
+
{ header: "RUN ID", getValue: (item) => item.runId ?? "" }
|
|
43123
|
+
];
|
|
43124
|
+
var ONBOARDING_PAIR_COLUMNS = [
|
|
43125
|
+
{ header: "DEPARTMENT", getValue: (item) => String(item.departmentId ?? "") },
|
|
43126
|
+
{ header: "PATIENT STATUS", getValue: (item) => item.patientStatus ?? "" },
|
|
43127
|
+
{ header: "STATUS", getValue: (item) => item.status ?? "" },
|
|
43128
|
+
{ header: "STOP REASON", getValue: (item) => item.stopReason ?? "" },
|
|
43129
|
+
{ header: "GEN", getValue: (item) => String(item.generation ?? "") },
|
|
43130
|
+
{ header: "NEXT OFFSET", getValue: (item) => String(item.nextOffset ?? "") },
|
|
43131
|
+
{ header: "PAGES (RUN)", getValue: (item) => String(item.pagesDone ?? 0) },
|
|
43132
|
+
{ header: "~FETCHED", getValue: (item) => String(item.totals?.fetched ?? 0) },
|
|
43133
|
+
{ header: "~APPLIED", getValue: (item) => String(item.totals?.applied ?? 0) },
|
|
43134
|
+
{ header: "~SKIPPED", getValue: (item) => String(item.totals?.skipped ?? 0) },
|
|
43135
|
+
{ header: "~FAILED", getValue: (item) => String(item.totals?.failed ?? 0) },
|
|
43136
|
+
{ header: "RUN ID", getValue: (item) => item.runId ?? "" }
|
|
43137
|
+
];
|
|
43138
|
+
var RESUMABLE_PAIR_STATUSES = /* @__PURE__ */ new Set([
|
|
43139
|
+
"failed",
|
|
43140
|
+
"aborted",
|
|
43141
|
+
"truncated",
|
|
43142
|
+
"pending",
|
|
43143
|
+
"running",
|
|
43144
|
+
"waiting"
|
|
43145
|
+
]);
|
|
43146
|
+
function onboardingStatusLines(status, connectionId) {
|
|
43147
|
+
const lines = [];
|
|
43148
|
+
const execution = status.execution;
|
|
43149
|
+
if (execution) {
|
|
43150
|
+
const failure = execution.failureCode ? ` (failure: ${execution.failureCode})` : "";
|
|
43151
|
+
lines.push(
|
|
43152
|
+
`Temporal execution: ${execution.workflowId} run ${execution.runId ?? "-"} \u2014 ${execution.status}${failure}`
|
|
43153
|
+
);
|
|
43154
|
+
} else {
|
|
43155
|
+
lines.push("Temporal execution: none recorded");
|
|
43156
|
+
}
|
|
43157
|
+
if (status.waitingUntil) {
|
|
43158
|
+
lines.push(
|
|
43159
|
+
`Waiting for the operator window (21:00\u201308:00 America/New_York) until ${status.waitingUntil}`
|
|
43160
|
+
);
|
|
43161
|
+
}
|
|
43162
|
+
if (status.preview) {
|
|
43163
|
+
const previewPairs = status.preview.pairs ?? [];
|
|
43164
|
+
const admitted = previewPairs.reduce((n, p) => n + (p.totals?.admitted ?? 0), 0);
|
|
43165
|
+
const notAdmitted = previewPairs.reduce(
|
|
43166
|
+
(n, p) => n + (p.totals?.notAdmitted ?? 0),
|
|
43167
|
+
0
|
|
43168
|
+
);
|
|
43169
|
+
lines.push(
|
|
43170
|
+
`Latest preview: ${previewPairs.length} pair(s), ~${admitted} admission-eligible (incl. already-linked), ~${notAdmitted} not admitted (read-only)`
|
|
43171
|
+
);
|
|
43172
|
+
}
|
|
43173
|
+
lines.push("Counts are approximate.");
|
|
43174
|
+
const unfinished = (status.pairs ?? []).some(
|
|
43175
|
+
(p) => p.inCurrentCohort && RESUMABLE_PAIR_STATUSES.has(p.status) && p.runId
|
|
43176
|
+
);
|
|
43177
|
+
if (unfinished && execution?.status !== "running") {
|
|
43178
|
+
lines.push(
|
|
43179
|
+
`Unfinished pairs continue only on an explicit resume: gr fhir-connections onboarding-import start --id ${connectionId} --resume --allow-write`
|
|
43180
|
+
);
|
|
43181
|
+
}
|
|
43182
|
+
return lines;
|
|
43183
|
+
}
|
|
40405
43184
|
var fhirConnectionsDomain = {
|
|
40406
43185
|
name: "fhir-connections",
|
|
40407
43186
|
description: "Manage FHIR connections",
|
|
@@ -40447,8 +43226,8 @@ var fhirConnectionsDomain = {
|
|
|
40447
43226
|
],
|
|
40448
43227
|
examples: [
|
|
40449
43228
|
"fhir-connections encounter-sync runs --id 12",
|
|
40450
|
-
"fhir-connections encounter-sync runs --id 12 --output json",
|
|
40451
|
-
"fhir-connections encounter-sync runs --id 12 --limit 5 --output json"
|
|
43229
|
+
"fhir-connections encounter-sync runs --id 12 --output-format json",
|
|
43230
|
+
"fhir-connections encounter-sync runs --id 12 --limit 5 --output-format json"
|
|
40452
43231
|
],
|
|
40453
43232
|
handler: async ({ ctx, workspace, args }) => {
|
|
40454
43233
|
const limit = args["limit"] ? Number(args["limit"]) : 20;
|
|
@@ -40459,6 +43238,77 @@ var fhirConnectionsDomain = {
|
|
|
40459
43238
|
);
|
|
40460
43239
|
outputData(runs, ctx, ENCOUNTER_RUN_COLUMNS);
|
|
40461
43240
|
}
|
|
43241
|
+
},
|
|
43242
|
+
{
|
|
43243
|
+
// athenahealth onboarding import (PR-C): one explicit, audited
|
|
43244
|
+
// operator execution per connection, at most 50 pages per pair per
|
|
43245
|
+
// run. Thin over the SDK; the server decides everything.
|
|
43246
|
+
path: ["fhir-connections", "onboarding-import", "start"],
|
|
43247
|
+
description: "Start an athenahealth onboarding import (or --resume / --override / --dry-run preview)",
|
|
43248
|
+
requiresWorkspace: true,
|
|
43249
|
+
mutates: true,
|
|
43250
|
+
args: [
|
|
43251
|
+
{ name: "id", description: "FHIR connection ID", required: true },
|
|
43252
|
+
{
|
|
43253
|
+
name: "dry-run",
|
|
43254
|
+
description: "Preview: read and classify admission only, write no Members",
|
|
43255
|
+
isFlag: true
|
|
43256
|
+
},
|
|
43257
|
+
{
|
|
43258
|
+
name: "resume",
|
|
43259
|
+
description: "Continue unfinished (failed, truncated, aborted) pairs at their stored frontier",
|
|
43260
|
+
isFlag: true
|
|
43261
|
+
},
|
|
43262
|
+
{
|
|
43263
|
+
name: "override",
|
|
43264
|
+
description: "Rescan completed pairs from offset 0 under a new generation",
|
|
43265
|
+
isFlag: true
|
|
43266
|
+
}
|
|
43267
|
+
],
|
|
43268
|
+
examples: [
|
|
43269
|
+
"fhir-connections onboarding-import start --id 12 --dry-run --allow-write",
|
|
43270
|
+
"fhir-connections onboarding-import start --id 12 --allow-write",
|
|
43271
|
+
"fhir-connections onboarding-import start --id 12 --resume --allow-write"
|
|
43272
|
+
],
|
|
43273
|
+
handler: async ({ ctx, workspace, args }) => {
|
|
43274
|
+
const connectionId = requireNumber(args, "id");
|
|
43275
|
+
const started = await requireAuth(ctx).apiClient.fhirStartOnboardingImport(
|
|
43276
|
+
workspace,
|
|
43277
|
+
connectionId,
|
|
43278
|
+
{
|
|
43279
|
+
dryRun: args["dry-run"] === true,
|
|
43280
|
+
resume: args["resume"] === true,
|
|
43281
|
+
override: args["override"] === true
|
|
43282
|
+
}
|
|
43283
|
+
);
|
|
43284
|
+
outputSingle(started, ctx, ONBOARDING_START_COLUMNS);
|
|
43285
|
+
hint(ctx, [
|
|
43286
|
+
`Started. Follow progress with: gr fhir-connections onboarding-import status --id ${connectionId}`
|
|
43287
|
+
]);
|
|
43288
|
+
}
|
|
43289
|
+
},
|
|
43290
|
+
{
|
|
43291
|
+
path: ["fhir-connections", "onboarding-import", "status"],
|
|
43292
|
+
description: "Show athenahealth onboarding-import progress and its Temporal execution (read-only)",
|
|
43293
|
+
requiresWorkspace: true,
|
|
43294
|
+
args: [{ name: "id", description: "FHIR connection ID", required: true }],
|
|
43295
|
+
examples: [
|
|
43296
|
+
"fhir-connections onboarding-import status --id 12",
|
|
43297
|
+
"fhir-connections onboarding-import status --id 12 --output-format json"
|
|
43298
|
+
],
|
|
43299
|
+
handler: async ({ ctx, workspace, args }) => {
|
|
43300
|
+
const connectionId = requireNumber(args, "id");
|
|
43301
|
+
const status = await requireAuth(ctx).apiClient.fhirGetOnboardingImportStatus(
|
|
43302
|
+
workspace,
|
|
43303
|
+
connectionId
|
|
43304
|
+
);
|
|
43305
|
+
if (ctx.jq || (ctx.outputFormat ?? "table") !== "table") {
|
|
43306
|
+
outputSingle(status, ctx);
|
|
43307
|
+
return;
|
|
43308
|
+
}
|
|
43309
|
+
outputData(status.pairs, ctx, ONBOARDING_PAIR_COLUMNS);
|
|
43310
|
+
hint(ctx, onboardingStatusLines(status, connectionId));
|
|
43311
|
+
}
|
|
40462
43312
|
}
|
|
40463
43313
|
]
|
|
40464
43314
|
};
|
|
@@ -40805,15 +43655,18 @@ var hubspotDomain = {
|
|
|
40805
43655
|
mutates: true,
|
|
40806
43656
|
requiresWorkspace: true,
|
|
40807
43657
|
examples: [
|
|
40808
|
-
"#
|
|
43658
|
+
"# When the response shows platformAppAvailable=true, the workspace connects through",
|
|
43659
|
+
"# the shared Gravity Rail HubSpot app: install, then authorize. That's all.",
|
|
43660
|
+
"gr hubspot install -w <ws> --allow-write",
|
|
43661
|
+
"gr hubspot authorize -w <ws> --allow-write # then open the returned authorizeUrl",
|
|
43662
|
+
"",
|
|
43663
|
+
"# To use your own HubSpot app instead (a Projects-platform app; HubSpot no longer",
|
|
43664
|
+
"# allows new private or developer apps):",
|
|
40809
43665
|
'# 1. install -> creates the connection; the response includes the OAuth "callbackUrl"',
|
|
40810
|
-
"# 2. in HubSpot:
|
|
40811
|
-
"#
|
|
43666
|
+
"# 2. in HubSpot: give your app that callbackUrl as a Redirect URL, with CRM scopes",
|
|
43667
|
+
"# (contacts/companies/deals read+write). Copy the Client ID + Secret.",
|
|
40812
43668
|
"# 3. configure -> save that Client ID / Secret",
|
|
40813
|
-
'# 4. authorize -> returns an "authorizeUrl"; open it to grant access.
|
|
40814
|
-
"# reports configured=true and connected=true.",
|
|
40815
|
-
"",
|
|
40816
|
-
"gr hubspot install -w <ws> --allow-write",
|
|
43669
|
+
'# 4. authorize -> returns an "authorizeUrl"; open it to grant access.',
|
|
40817
43670
|
"gr hubspot status -w <ws> # read back callbackUrl + configured/connected",
|
|
40818
43671
|
`gr hubspot configure -w <ws> --allow-write -d '{"clientId":"...","clientSecret":"..."}'`,
|
|
40819
43672
|
"gr hubspot authorize -w <ws> --allow-write # then open the returned authorizeUrl"
|
|
@@ -41838,6 +44691,7 @@ function registerPublicDomains(registry) {
|
|
|
41838
44691
|
registry.register(calendarsDomain);
|
|
41839
44692
|
registry.register(qualificationsDomain);
|
|
41840
44693
|
registry.register(queriesDomain);
|
|
44694
|
+
registry.register(dataReportsDomain);
|
|
41841
44695
|
registry.register(personasDomain);
|
|
41842
44696
|
registry.register(metricsDomain);
|
|
41843
44697
|
registry.register(journeysDomain);
|
|
@@ -46405,11 +49259,8 @@ var topLevelCommands = [
|
|
|
46405
49259
|
// src/lib.ts
|
|
46406
49260
|
init_concierge_api();
|
|
46407
49261
|
|
|
46408
|
-
// package.json
|
|
46409
|
-
var package_default = {
|
|
46410
|
-
version: "0.53.1"};
|
|
46411
|
-
|
|
46412
49262
|
// src/gr.ts
|
|
49263
|
+
init_package();
|
|
46413
49264
|
var VERSION = package_default.version;
|
|
46414
49265
|
function createRegistry() {
|
|
46415
49266
|
const registry = new CommandRegistry();
|
|
@@ -46491,7 +49342,7 @@ main().catch(handleError);
|
|
|
46491
49342
|
/*! Bundled license information:
|
|
46492
49343
|
|
|
46493
49344
|
js-yaml/dist/js-yaml.mjs:
|
|
46494
|
-
(*! js-yaml 5.4.
|
|
49345
|
+
(*! js-yaml 5.4.3 https://github.com/nodeca/js-yaml @license MIT *)
|
|
46495
49346
|
*/
|
|
46496
49347
|
//# sourceMappingURL=gr.js.map
|
|
46497
49348
|
//# sourceMappingURL=gr.js.map
|