@eide/foir-cli 0.49.0 → 0.51.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/dist/cli.js +310 -65
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/cli.ts
|
|
4
4
|
import { config } from "dotenv";
|
|
5
|
-
import { resolve as
|
|
5
|
+
import { resolve as resolve8, dirname as dirname4 } from "path";
|
|
6
6
|
import { fileURLToPath } from "url";
|
|
7
7
|
import { createRequire } from "module";
|
|
8
8
|
import { Command } from "commander";
|
|
@@ -303,13 +303,13 @@ function withErrorHandler(optsFn, fn) {
|
|
|
303
303
|
// src/commands/login.ts
|
|
304
304
|
async function findAvailablePort(start, end) {
|
|
305
305
|
for (let port = start; port <= end; port++) {
|
|
306
|
-
const available = await new Promise((
|
|
306
|
+
const available = await new Promise((resolve9) => {
|
|
307
307
|
const server = http.createServer();
|
|
308
308
|
server.listen(port, () => {
|
|
309
309
|
server.close();
|
|
310
|
-
|
|
310
|
+
resolve9(true);
|
|
311
311
|
});
|
|
312
|
-
server.on("error", () =>
|
|
312
|
+
server.on("error", () => resolve9(false));
|
|
313
313
|
});
|
|
314
314
|
if (available) return port;
|
|
315
315
|
}
|
|
@@ -347,7 +347,7 @@ async function loginAction(globalOpts) {
|
|
|
347
347
|
const state = crypto.randomBytes(16).toString("hex");
|
|
348
348
|
const port = await findAvailablePort(9876, 9900);
|
|
349
349
|
const redirectUri = `http://localhost:${port}/callback`;
|
|
350
|
-
const authCode = await new Promise((
|
|
350
|
+
const authCode = await new Promise((resolve9, reject) => {
|
|
351
351
|
let timeoutId;
|
|
352
352
|
const server = http.createServer((req, res) => {
|
|
353
353
|
const url = new URL(req.url, `http://localhost:${port}`);
|
|
@@ -386,7 +386,7 @@ async function loginAction(globalOpts) {
|
|
|
386
386
|
);
|
|
387
387
|
server.closeAllConnections();
|
|
388
388
|
server.close();
|
|
389
|
-
|
|
389
|
+
resolve9(code);
|
|
390
390
|
}
|
|
391
391
|
});
|
|
392
392
|
server.listen(port);
|
|
@@ -470,6 +470,8 @@ import { file_google_protobuf_struct, file_google_protobuf_timestamp as file_goo
|
|
|
470
470
|
import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
|
|
471
471
|
import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
|
|
472
472
|
var file_publish_v1_publish = /* @__PURE__ */ fileDesc("ChhwdWJsaXNoL3YxL3B1Ymxpc2gucHJvdG8SCnB1Ymxpc2gudjEikgEKDkJyZWFraW5nQ2hhbmdlEjQKCHNldmVyaXR5GAEgASgOMiIucHVibGlzaC52MS5CcmVha2luZ0NoYW5nZVNldmVyaXR5EhMKC2VudGl0eV9raW5kGAIgASgJEhIKCmVudGl0eV9rZXkYAyABKAkSDAoEcGF0aBgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCSLKAgoNUHVibGlzaFN0YXR1cxIhChRwdWJsaXNoZWRfdmVyc2lvbl9pZBgBIAEoCUgAiAEBEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCUgBiAEBEjUKDHB1Ymxpc2hlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIZCgxwdWJsaXNoZWRfYnkYBCABKAlIA4gBARIbChNoYXNfcGVuZGluZ19jaGFuZ2VzGAUgASgIEjQKEGJyZWFraW5nX2NoYW5nZXMYBiADKAsyGi5wdWJsaXNoLnYxLkJyZWFraW5nQ2hhbmdlQhcKFV9wdWJsaXNoZWRfdmVyc2lvbl9pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQg8KDV9wdWJsaXNoZWRfYXRCDwoNX3B1Ymxpc2hlZF9ieSKuAQoNUGVuZGluZ0VudGl0eRITCgtlbnRpdHlfa2luZBgBIAEoCRIRCgllbnRpdHlfaWQYAiABKAkSEgoKZW50aXR5X2tleRgDIAEoCRITCgtlbnRpdHlfbmFtZRgEIAEoCRIWCg5jaGFuZ2Vfc3VtbWFyeRgFIAEoCRI0ChBicmVha2luZ19jaGFuZ2VzGAYgAygLMhoucHVibGlzaC52MS5CcmVha2luZ0NoYW5nZSpnCg1TY2hlbWFDaGFubmVsEh4KGlNDSEVNQV9DSEFOTkVMX1VOU1BFQ0lGSUVEEAASHAoYU0NIRU1BX0NIQU5ORUxfUFVCTElTSEVEEAESGAoUU0NIRU1BX0NIQU5ORUxfRFJBRlQQAiq2AQoWQnJlYWtpbmdDaGFuZ2VTZXZlcml0eRIoCiRCUkVBS0lOR19DSEFOR0VfU0VWRVJJVFlfVU5TUEVDSUZJRUQQABIlCiFCUkVBS0lOR19DSEFOR0VfU0VWRVJJVFlfQURESVRJVkUQARIkCiBCUkVBS0lOR19DSEFOR0VfU0VWRVJJVFlfV0FSTklORxACEiUKIUJSRUFLSU5HX0NIQU5HRV9TRVZFUklUWV9CUkVBS0lORxADQjtaOWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9wdWJsaXNoL3YxO3B1Ymxpc2h2MWIGcHJvdG8z", [file_google_protobuf_timestamp]);
|
|
473
|
+
var BreakingChangeSeveritySchema = /* @__PURE__ */ enumDesc(file_publish_v1_publish, 1);
|
|
474
|
+
var BreakingChangeSeverity = /* @__PURE__ */ tsEnum(BreakingChangeSeveritySchema);
|
|
473
475
|
|
|
474
476
|
// ../../packages/proto-ts/src/common/v1/pagination_pb.js
|
|
475
477
|
import { fileDesc as fileDesc2, messageDesc as messageDesc2 } from "@bufbuild/protobuf/codegenv2";
|
|
@@ -582,6 +584,7 @@ var DuplicateModelRequestSchema = /* @__PURE__ */ messageDesc5(file_models_v1_mo
|
|
|
582
584
|
var ListModelVersionsRequestSchema = /* @__PURE__ */ messageDesc5(file_models_v1_models, 22);
|
|
583
585
|
var RestoreModelVersionRequestSchema = /* @__PURE__ */ messageDesc5(file_models_v1_models, 26);
|
|
584
586
|
var PublishModelRequestSchema = /* @__PURE__ */ messageDesc5(file_models_v1_models, 36);
|
|
587
|
+
var GetModelPublishStatusRequestSchema = /* @__PURE__ */ messageDesc5(file_models_v1_models, 40);
|
|
585
588
|
var CacheControlScopeSchema = /* @__PURE__ */ enumDesc3(file_models_v1_models, 1);
|
|
586
589
|
var CacheControlScope = /* @__PURE__ */ tsEnum3(CacheControlScopeSchema);
|
|
587
590
|
var ModelsService = /* @__PURE__ */ serviceDesc2(file_models_v1_models, 0);
|
|
@@ -799,11 +802,18 @@ var HooksService = /* @__PURE__ */ serviceDesc9(file_hooks_v1_hooks, 0);
|
|
|
799
802
|
// ../../packages/proto-ts/src/notifications/v1/notifications_pb.js
|
|
800
803
|
import { enumDesc as enumDesc9, fileDesc as fileDesc14, messageDesc as messageDesc14, serviceDesc as serviceDesc10, tsEnum as tsEnum9 } from "@bufbuild/protobuf/codegenv2";
|
|
801
804
|
import { file_google_protobuf_struct as file_google_protobuf_struct10, file_google_protobuf_timestamp as file_google_protobuf_timestamp11 } from "@bufbuild/protobuf/wkt";
|
|
802
|
-
var file_notifications_v1_notifications = /* @__PURE__ */ fileDesc14("CiRub3RpZmljYXRpb25zL3YxL25vdGlmaWNhdGlvbnMucHJvdG8SEG5vdGlmaWNhdGlvbnMudjEisAUKDE5vdGlmaWNhdGlvbhIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEjAKBHR5cGUYAyABKA4yIi5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblR5cGUSDQoFdGl0bGUYBCABKAkSFAoHbWVzc2FnZRgFIAEoCUgAiAEBEjIKDHJpY2hfY29udGVudBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARJCCgtzb3VyY2VfdHlwZRgKIAEoDjIoLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uU291cmNlVHlwZUgCiAEBEhYKCXNvdXJjZV9pZBgLIAEoCUgDiAEBEhcKCmFjdGlvbl91cmwYDCABKAlIBIgBARIuCghtZXRhZGF0YRgNIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBYgBARIPCgdpc19yZWFkGBQgASgIEjAKB3JlYWRfYXQYFSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAaIAQESEQoJdGVuYW50X2lkGB4gASgJEhcKCnByb2plY3RfaWQYHyABKAlIB4gBARIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpleHBpcmVzX2F0GDMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgIiAEBQgoKCF9tZXNzYWdlQg8KDV9yaWNoX2NvbnRlbnRCDgoMX3NvdXJjZV90eXBlQgwKCl9zb3VyY2VfaWRCDQoLX2FjdGlvbl91cmxCCwoJX21ldGFkYXRhQgoKCF9yZWFkX2F0Qg0KC19wcm9qZWN0X2lkQg0KC19leHBpcmVzX2F0IskBChhMaXN0Tm90aWZpY2F0aW9uc1JlcXVlc3QSKwoFd2hlcmUYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESEgoFYWZ0ZXIYAiABKAlIAYgBARITCgZiZWZvcmUYAyABKAlIAogBARISCgVmaXJzdBgEIAEoBUgDiAEBEhEKBGxhc3QYBSABKAVIBIgBAUIICgZfd2hlcmVCCAoGX2FmdGVyQgkKB19iZWZvcmVCCAoGX2ZpcnN0QgcKBV9sYXN0IsMBChlMaXN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlEjUKDW5vdGlmaWNhdGlvbnMYASADKAsyHi5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbhINCgV0b3RhbBgCIAEoBRIUCgx1bnJlYWRfY291bnQYAyABKAUSKwoJcGFnZV9pbmZvGAQgASgLMhMuY29tbW9uLnYxLlBhZ2VJbmZvSACIAQESDwoHY3Vyc29ycxgFIAMoCUIMCgpfcGFnZV9pbmZvIikKG01hcmtOb3RpZmljYXRpb25SZWFkUmVxdWVzdBIKCgJpZBgBIAEoCSIvChxNYXJrTm90aWZpY2F0aW9uUmVhZFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiYQofTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBI1CgR0eXBlGAEgASgOMiIubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25UeXBlSACIAQFCBwoFX3R5cGUiMQogTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USDQoFY291bnQYASABKAUiJwoZRGVsZXRlTm90aWZpY2F0aW9uUmVxdWVzdBIKCgJpZBgBIAEoCSItChpEZWxldGVOb3RpZmljYXRpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIhcKFUdldFVucmVhZENvdW50UmVxdWVzdCInChZHZXRVbnJlYWRDb3VudFJlc3BvbnNlEg0KBWNvdW50GAEgASgFIrABChdTZW5kQW5ub3VuY2VtZW50UmVxdWVzdBINCgV0aXRsZRgBIAEoCRIUCgdtZXNzYWdlGAIgASgJSACIAQESFwoKYWN0aW9uX3VybBgDIAEoCUgBiAEBEhgKC3RhcmdldF90eXBlGAQgASgJSAKIAQESEgoKdGFyZ2V0X2lkcxgFIAMoCUIKCghfbWVzc2FnZUINCgtfYWN0aW9uX3VybEIOCgxfdGFyZ2V0X3R5cGUiUAoYU2VuZEFubm91bmNlbWVudFJlc3BvbnNlEjQKDG5vdGlmaWNhdGlvbhgBIAEoCzIeLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uIpgBCh5MaXN0QW5ub3VuY2VtZW50SGlzdG9yeVJlcXVlc3QSEgoFYWZ0ZXIYASABKAlIAIgBARITCgZiZWZvcmUYAiABKAlIAYgBARISCgVmaXJzdBgDIAEoBUgCiAEBEhEKBGxhc3QYBCABKAVIA4gBAUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIICgZfZmlyc3RCBwoFX2xhc3QiswEKH0xpc3RBbm5vdW5jZW1lbnRIaXN0b3J5UmVzcG9uc2USNQoNYW5ub3VuY2VtZW50cxgBIAMoCzIeLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uEg0KBXRvdGFsGAIgASgFEisKCXBhZ2VfaW5mbxgDIAEoCzITLmNvbW1vbi52MS5QYWdlSW5mb0gAiAEBEg8KB2N1cnNvcnMYBCADKAlCDAoKX3BhZ2VfaW5mbyKXAwoUQ3VzdG9tZXJOb3RpZmljYXRpb24SCgoCaWQYASABKAkSEwoLY3VzdG9tZXJfaWQYAiABKAkSDQoFdGl0bGUYAyABKAkSFAoHbWVzc2FnZRgEIAEoCUgAiAEBEhUKCGNhdGVnb3J5GAUgASgJSAGIAQESFwoKYWN0aW9uX3VybBgGIAEoCUgCiAEBEi4KCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgDiAEBEg8KB2lzX3JlYWQYCCABKAgSMAoHcmVhZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIRCgl0ZW5hbnRfaWQYFCABKAkSEgoKcHJvamVjdF9pZBgVIAEoCRIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfbWVzc2FnZUILCglfY2F0ZWdvcnlCDQoLX2FjdGlvbl91cmxCCwoJX21ldGFkYXRhQgoKCF9yZWFkX2F0ItEBCiBMaXN0Q3VzdG9tZXJOb3RpZmljYXRpb25zUmVxdWVzdBIrCgV3aGVyZRgBIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARISCgVhZnRlchgCIAEoCUgBiAEBEhMKBmJlZm9yZRgDIAEoCUgCiAEBEhIKBWZpcnN0GAQgASgFSAOIAQESEQoEbGFzdBgFIAEoBUgEiAEBQggKBl93aGVyZUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIICgZfZmlyc3RCBwoFX2xhc3QivQEKIUxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnNSZXNwb25zZRI9Cg1ub3RpZmljYXRpb25zGAEgAygLMiYubm90aWZpY2F0aW9ucy52MS5DdXN0b21lck5vdGlmaWNhdGlvbhINCgV0b3RhbBgCIAEoBRIrCglwYWdlX2luZm8YAyABKAsyEy5jb21tb24udjEuUGFnZUluZm9IAIgBARIPCgdjdXJzb3JzGAQgAygJQgwKCl9wYWdlX2luZm8i8AEKH1NlbmRDdXN0b21lck5vdGlmaWNhdGlvblJlcXVlc3QSEwoLY3VzdG9tZXJfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSFAoHbWVzc2FnZRgDIAEoCUgAiAEBEhUKCGNhdGVnb3J5GAQgASgJSAGIAQESFwoKYWN0aW9uX3VybBgFIAEoCUgCiAEBEi4KCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgDiAEBQgoKCF9tZXNzYWdlQgsKCV9jYXRlZ29yeUINCgtfYWN0aW9uX3VybEILCglfbWV0YWRhdGEiYAogU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uUmVzcG9uc2USPAoMbm90aWZpY2F0aW9uGAEgASgLMiYubm90aWZpY2F0aW9ucy52MS5DdXN0b21lck5vdGlmaWNhdGlvbiK4AQojU2VuZEJ1bGtDdXN0b21lck5vdGlmaWNhdGlvblJlcXVlc3QSFAoMY3VzdG9tZXJfaWRzGAEgAygJEg0KBXRpdGxlGAIgASgJEhQKB21lc3NhZ2UYAyABKAlIAIgBARIVCghjYXRlZ29yeRgEIAEoCUgBiAEBEhcKCmFjdGlvbl91cmwYBSABKAlIAogBAUIKCghfbWVzc2FnZUILCglfY2F0ZWdvcnlCDQoLX2FjdGlvbl91cmwiNQokU2VuZEJ1bGtDdXN0b21lck5vdGlmaWNhdGlvblJlc3BvbnNlEg0KBWNvdW50GAEgASgFIjEKI01hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWRSZXF1ZXN0EgoKAmlkGAEgASgJIjcKJE1hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIlMKJ01hcmtBbGxDdXN0b21lck5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBIYCgtjdXN0b21lcl9pZBgBIAEoCUgAiAEBQg4KDF9jdXN0b21lcl9pZCI5CihNYXJrQWxsQ3VzdG9tZXJOb3RpZmljYXRpb25zUmVhZFJlc3BvbnNlEg0KBWNvdW50GAEgASgFItABCh9MaXN0UHJvamVjdE5vdGlmaWNhdGlvbnNSZXF1ZXN0EisKBXdoZXJlGAEgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBEhIKBWFmdGVyGAIgASgJSAGIAQESEwoGYmVmb3JlGAMgASgJSAKIAQESEgoFZmlyc3QYBCABKAVIA4gBARIRCgRsYXN0GAUgASgFSASIAQFCCAoGX3doZXJlQggKBl9hZnRlckIJCgdfYmVmb3JlQggKBl9maXJzdEIHCgVfbGFzdCK8AQogTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVzcG9uc2USPQoNbm90aWZpY2F0aW9ucxgBIAMoCzImLm5vdGlmaWNhdGlvbnMudjEuQ3VzdG9tZXJOb3RpZmljYXRpb24SDQoFdG90YWwYAiABKAUSKwoJcGFnZV9pbmZvGAMgASgLMhMuY29tbW9uLnYxLlBhZ2VJbmZvSACIAQESDwoHY3Vyc29ycxgEIAMoCUIMCgpfcGFnZV9pbmZvIm8KFk5vdGlmaWNhdGlvblByZWZlcmVuY2USEAoIY2F0ZWdvcnkYASABKAkSFQoNZW1haWxfZW5hYmxlZBgCIAEoCBIUCgxwdXNoX2VuYWJsZWQYAyABKAgSFgoOaW5fYXBwX2VuYWJsZWQYBCABKAgiOAohR2V0Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNSZXF1ZXN0EhMKC2N1c3RvbWVyX2lkGAEgASgJImMKIkdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUmVzcG9uc2USPQoLcHJlZmVyZW5jZXMYASADKAsyKC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblByZWZlcmVuY2Ui1gEKI1VwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2VSZXF1ZXN0EhMKC2N1c3RvbWVyX2lkGAEgASgJEhAKCGNhdGVnb3J5GAIgASgJEhoKDWVtYWlsX2VuYWJsZWQYAyABKAhIAIgBARIZCgxwdXNoX2VuYWJsZWQYBCABKAhIAYgBARIbCg5pbl9hcHBfZW5hYmxlZBgFIAEoCEgCiAEBQhAKDl9lbWFpbF9lbmFibGVkQg8KDV9wdXNoX2VuYWJsZWRCEQoPX2luX2FwcF9lbmFibGVkIjcKJFVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2VSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIlIKGlJlZ2lzdGVyRGV2aWNlVG9rZW5SZXF1ZXN0EhMKC2N1c3RvbWVyX2lkGAEgASgJEg0KBXRva2VuGAIgASgJEhAKCHBsYXRmb3JtGAMgASgJIi4KG1JlZ2lzdGVyRGV2aWNlVG9rZW5SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIi0KHFVucmVnaXN0ZXJEZXZpY2VUb2tlblJlcXVlc3QSDQoFdG9rZW4YASABKAkiMAodVW5yZWdpc3RlckRldmljZVRva2VuUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCrIAgoQTm90aWZpY2F0aW9uVHlwZRIhCh1OT1RJRklDQVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEiMKH05PVElGSUNBVElPTl9UWVBFX0pPQl9DT01QTEVURUQQARIgChxOT1RJRklDQVRJT05fVFlQRV9KT0JfRkFJTEVEEAISIgoeTk9USUZJQ0FUSU9OX1RZUEVfSk9CX1BST0dSRVNTEAMSHQoZTk9USUZJQ0FUSU9OX1RZUEVfTUVOVElPThAEEiAKHE5PVElGSUNBVElPTl9UWVBFX05PVEVfUkVQTFkQBRIjCh9OT1RJRklDQVRJT05fVFlQRV9OT1RFX1JFU09MVkVEEAYSHAoYTk9USUZJQ0FUSU9OX1RZUEVfU1lTVEVNEAcSIgoeTk9USUZJQ0FUSU9OX1RZUEVfQU5OT1VOQ0VNRU5UEAgq9QEKFk5vdGlmaWNhdGlvblNvdXJjZVR5cGUSKAokTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIwofTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX1JFQ09SRBABEiIKHk5PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9NT0RFTBACEiEKHU5PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9OT1RFEAMSIAocTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX0pPQhAEEiMKH05PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9TWVNURU0QBTKTEQoUTm90aWZpY2F0aW9uc1NlcnZpY2USbAoRTGlzdE5vdGlmaWNhdGlvbnMSKi5ub3RpZmljYXRpb25zLnYxLkxpc3ROb3RpZmljYXRpb25zUmVxdWVzdBorLm5vdGlmaWNhdGlvbnMudjEuTGlzdE5vdGlmaWNhdGlvbnNSZXNwb25zZRJjCg5HZXRVbnJlYWRDb3VudBInLm5vdGlmaWNhdGlvbnMudjEuR2V0VW5yZWFkQ291bnRSZXF1ZXN0Gigubm90aWZpY2F0aW9ucy52MS5HZXRVbnJlYWRDb3VudFJlc3BvbnNlEnUKFE1hcmtOb3RpZmljYXRpb25SZWFkEi0ubm90aWZpY2F0aW9ucy52MS5NYXJrTm90aWZpY2F0aW9uUmVhZFJlcXVlc3QaLi5ub3RpZmljYXRpb25zLnYxLk1hcmtOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USgQEKGE1hcmtBbGxOb3RpZmljYXRpb25zUmVhZBIxLm5vdGlmaWNhdGlvbnMudjEuTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USbwoSRGVsZXRlTm90aWZpY2F0aW9uEisubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25SZXF1ZXN0Giwubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25SZXNwb25zZRJpChBTZW5kQW5ub3VuY2VtZW50Eikubm90aWZpY2F0aW9ucy52MS5TZW5kQW5ub3VuY2VtZW50UmVxdWVzdBoqLm5vdGlmaWNhdGlvbnMudjEuU2VuZEFubm91bmNlbWVudFJlc3BvbnNlEn4KF0xpc3RBbm5vdW5jZW1lbnRIaXN0b3J5EjAubm90aWZpY2F0aW9ucy52MS5MaXN0QW5ub3VuY2VtZW50SGlzdG9yeVJlcXVlc3QaMS5ub3RpZmljYXRpb25zLnYxLkxpc3RBbm5vdW5jZW1lbnRIaXN0b3J5UmVzcG9uc2UShAEKGUxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnMSMi5ub3RpZmljYXRpb25zLnYxLkxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnNSZXF1ZXN0GjMubm90aWZpY2F0aW9ucy52MS5MaXN0Q3VzdG9tZXJOb3RpZmljYXRpb25zUmVzcG9uc2USgQEKGFNlbmRDdXN0b21lck5vdGlmaWNhdGlvbhIxLm5vdGlmaWNhdGlvbnMudjEuU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uUmVzcG9uc2USjQEKHFNlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb24SNS5ub3RpZmljYXRpb25zLnYxLlNlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb25SZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5TZW5kQnVsa0N1c3RvbWVyTm90aWZpY2F0aW9uUmVzcG9uc2USjQEKHE1hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWQSNS5ub3RpZmljYXRpb25zLnYxLk1hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWRSZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5NYXJrQ3VzdG9tZXJOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USmQEKIE1hcmtBbGxDdXN0b21lck5vdGlmaWNhdGlvbnNSZWFkEjkubm90aWZpY2F0aW9ucy52MS5NYXJrQWxsQ3VzdG9tZXJOb3RpZmljYXRpb25zUmVhZFJlcXVlc3QaOi5ub3RpZmljYXRpb25zLnYxLk1hcmtBbGxDdXN0b21lck5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USgQEKGExpc3RQcm9qZWN0Tm90aWZpY2F0aW9ucxIxLm5vdGlmaWNhdGlvbnMudjEuTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVzcG9uc2UShwEKGkdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzEjMubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25QcmVmZXJlbmNlc1JlcXVlc3QaNC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUmVzcG9uc2USjQEKHFVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2USNS5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2VSZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5VcGRhdGVOb3RpZmljYXRpb25QcmVmZXJlbmNlUmVzcG9uc2UScgoTUmVnaXN0ZXJEZXZpY2VUb2tlbhIsLm5vdGlmaWNhdGlvbnMudjEuUmVnaXN0ZXJEZXZpY2VUb2tlblJlcXVlc3QaLS5ub3RpZmljYXRpb25zLnYxLlJlZ2lzdGVyRGV2aWNlVG9rZW5SZXNwb25zZRJ4ChVVbnJlZ2lzdGVyRGV2aWNlVG9rZW4SLi5ub3RpZmljYXRpb25zLnYxLlVucmVnaXN0ZXJEZXZpY2VUb2tlblJlcXVlc3QaLy5ub3RpZmljYXRpb25zLnYxLlVucmVnaXN0ZXJEZXZpY2VUb2tlblJlc3BvbnNlQkdaRWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9ub3RpZmljYXRpb25zL3YxO25vdGlmaWNhdGlvbnN2MWIGcHJvdG8z", [file_google_protobuf_struct10, file_google_protobuf_timestamp11, file_common_v1_pagination]);
|
|
805
|
+
var file_notifications_v1_notifications = /* @__PURE__ */ fileDesc14("CiRub3RpZmljYXRpb25zL3YxL25vdGlmaWNhdGlvbnMucHJvdG8SEG5vdGlmaWNhdGlvbnMudjEisAUKDE5vdGlmaWNhdGlvbhIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEjAKBHR5cGUYAyABKA4yIi5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblR5cGUSDQoFdGl0bGUYBCABKAkSFAoHbWVzc2FnZRgFIAEoCUgAiAEBEjIKDHJpY2hfY29udGVudBgGIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARJCCgtzb3VyY2VfdHlwZRgKIAEoDjIoLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uU291cmNlVHlwZUgCiAEBEhYKCXNvdXJjZV9pZBgLIAEoCUgDiAEBEhcKCmFjdGlvbl91cmwYDCABKAlIBIgBARIuCghtZXRhZGF0YRgNIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBYgBARIPCgdpc19yZWFkGBQgASgIEjAKB3JlYWRfYXQYFSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAaIAQESEQoJdGVuYW50X2lkGB4gASgJEhcKCnByb2plY3RfaWQYHyABKAlIB4gBARIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpleHBpcmVzX2F0GDMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgIiAEBQgoKCF9tZXNzYWdlQg8KDV9yaWNoX2NvbnRlbnRCDgoMX3NvdXJjZV90eXBlQgwKCl9zb3VyY2VfaWRCDQoLX2FjdGlvbl91cmxCCwoJX21ldGFkYXRhQgoKCF9yZWFkX2F0Qg0KC19wcm9qZWN0X2lkQg0KC19leHBpcmVzX2F0IskBChhMaXN0Tm90aWZpY2F0aW9uc1JlcXVlc3QSKwoFd2hlcmUYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESEgoFYWZ0ZXIYAiABKAlIAYgBARITCgZiZWZvcmUYAyABKAlIAogBARISCgVmaXJzdBgEIAEoBUgDiAEBEhEKBGxhc3QYBSABKAVIBIgBAUIICgZfd2hlcmVCCAoGX2FmdGVyQgkKB19iZWZvcmVCCAoGX2ZpcnN0QgcKBV9sYXN0IsMBChlMaXN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlEjUKDW5vdGlmaWNhdGlvbnMYASADKAsyHi5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbhINCgV0b3RhbBgCIAEoBRIUCgx1bnJlYWRfY291bnQYAyABKAUSKwoJcGFnZV9pbmZvGAQgASgLMhMuY29tbW9uLnYxLlBhZ2VJbmZvSACIAQESDwoHY3Vyc29ycxgFIAMoCUIMCgpfcGFnZV9pbmZvIikKG01hcmtOb3RpZmljYXRpb25SZWFkUmVxdWVzdBIKCgJpZBgBIAEoCSIvChxNYXJrTm90aWZpY2F0aW9uUmVhZFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiYQofTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBI1CgR0eXBlGAEgASgOMiIubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25UeXBlSACIAQFCBwoFX3R5cGUiMQogTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USDQoFY291bnQYASABKAUiJwoZRGVsZXRlTm90aWZpY2F0aW9uUmVxdWVzdBIKCgJpZBgBIAEoCSItChpEZWxldGVOb3RpZmljYXRpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIhcKFUdldFVucmVhZENvdW50UmVxdWVzdCInChZHZXRVbnJlYWRDb3VudFJlc3BvbnNlEg0KBWNvdW50GAEgASgFIrABChdTZW5kQW5ub3VuY2VtZW50UmVxdWVzdBINCgV0aXRsZRgBIAEoCRIUCgdtZXNzYWdlGAIgASgJSACIAQESFwoKYWN0aW9uX3VybBgDIAEoCUgBiAEBEhgKC3RhcmdldF90eXBlGAQgASgJSAKIAQESEgoKdGFyZ2V0X2lkcxgFIAMoCUIKCghfbWVzc2FnZUINCgtfYWN0aW9uX3VybEIOCgxfdGFyZ2V0X3R5cGUiUAoYU2VuZEFubm91bmNlbWVudFJlc3BvbnNlEjQKDG5vdGlmaWNhdGlvbhgBIAEoCzIeLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uIpgBCh5MaXN0QW5ub3VuY2VtZW50SGlzdG9yeVJlcXVlc3QSEgoFYWZ0ZXIYASABKAlIAIgBARITCgZiZWZvcmUYAiABKAlIAYgBARISCgVmaXJzdBgDIAEoBUgCiAEBEhEKBGxhc3QYBCABKAVIA4gBAUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIICgZfZmlyc3RCBwoFX2xhc3QiswEKH0xpc3RBbm5vdW5jZW1lbnRIaXN0b3J5UmVzcG9uc2USNQoNYW5ub3VuY2VtZW50cxgBIAMoCzIeLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uEg0KBXRvdGFsGAIgASgFEisKCXBhZ2VfaW5mbxgDIAEoCzITLmNvbW1vbi52MS5QYWdlSW5mb0gAiAEBEg8KB2N1cnNvcnMYBCADKAlCDAoKX3BhZ2VfaW5mbyKXAwoUQ3VzdG9tZXJOb3RpZmljYXRpb24SCgoCaWQYASABKAkSEwoLY3VzdG9tZXJfaWQYAiABKAkSDQoFdGl0bGUYAyABKAkSFAoHbWVzc2FnZRgEIAEoCUgAiAEBEhUKCGNhdGVnb3J5GAUgASgJSAGIAQESFwoKYWN0aW9uX3VybBgGIAEoCUgCiAEBEi4KCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgDiAEBEg8KB2lzX3JlYWQYCCABKAgSMAoHcmVhZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIRCgl0ZW5hbnRfaWQYFCABKAkSEgoKcHJvamVjdF9pZBgVIAEoCRIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfbWVzc2FnZUILCglfY2F0ZWdvcnlCDQoLX2FjdGlvbl91cmxCCwoJX21ldGFkYXRhQgoKCF9yZWFkX2F0ItEBCiBMaXN0Q3VzdG9tZXJOb3RpZmljYXRpb25zUmVxdWVzdBIrCgV3aGVyZRgBIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARISCgVhZnRlchgCIAEoCUgBiAEBEhMKBmJlZm9yZRgDIAEoCUgCiAEBEhIKBWZpcnN0GAQgASgFSAOIAQESEQoEbGFzdBgFIAEoBUgEiAEBQggKBl93aGVyZUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIICgZfZmlyc3RCBwoFX2xhc3QivQEKIUxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnNSZXNwb25zZRI9Cg1ub3RpZmljYXRpb25zGAEgAygLMiYubm90aWZpY2F0aW9ucy52MS5DdXN0b21lck5vdGlmaWNhdGlvbhINCgV0b3RhbBgCIAEoBRIrCglwYWdlX2luZm8YAyABKAsyEy5jb21tb24udjEuUGFnZUluZm9IAIgBARIPCgdjdXJzb3JzGAQgAygJQgwKCl9wYWdlX2luZm8izwQKH1NlbmRDdXN0b21lck5vdGlmaWNhdGlvblJlcXVlc3QSEwoLY3VzdG9tZXJfaWQYASABKAkSDQoFdGl0bGUYAiABKAkSFAoHbWVzc2FnZRgDIAEoCUgAiAEBEhUKCGNhdGVnb3J5GAQgASgJSAGIAQESFwoKYWN0aW9uX3VybBgFIAEoCUgCiAEBEi4KCG1ldGFkYXRhGAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgDiAEBEhYKCWRlZXBfbGluaxgKIAEoCUgEiAEBEhIKBWJhZGdlGAsgASgFSAWIAQESFgoJdGhyZWFkX2lkGAwgASgJSAaIAQESLwoJcHVzaF9kYXRhGA0gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgHiAEBEhoKDWVtYWlsX3N1YmplY3QYFCABKAlICIgBARIXCgplbWFpbF9ib2R5GBUgASgJSAmIAQESGwoOZW1haWxfcmVwbHlfdG8YFiABKAlICogBARIuCgplbWFpbF9jdGFzGBcgAygLMhoubm90aWZpY2F0aW9ucy52MS5FbWFpbEN0YUIKCghfbWVzc2FnZUILCglfY2F0ZWdvcnlCDQoLX2FjdGlvbl91cmxCCwoJX21ldGFkYXRhQgwKCl9kZWVwX2xpbmtCCAoGX2JhZGdlQgwKCl90aHJlYWRfaWRCDAoKX3B1c2hfZGF0YUIQCg5fZW1haWxfc3ViamVjdEINCgtfZW1haWxfYm9keUIRCg9fZW1haWxfcmVwbHlfdG8iJgoIRW1haWxDdGESDQoFbGFiZWwYASABKAkSCwoDdXJsGAIgASgJImAKIFNlbmRDdXN0b21lck5vdGlmaWNhdGlvblJlc3BvbnNlEjwKDG5vdGlmaWNhdGlvbhgBIAEoCzImLm5vdGlmaWNhdGlvbnMudjEuQ3VzdG9tZXJOb3RpZmljYXRpb24iuAEKI1NlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb25SZXF1ZXN0EhQKDGN1c3RvbWVyX2lkcxgBIAMoCRINCgV0aXRsZRgCIAEoCRIUCgdtZXNzYWdlGAMgASgJSACIAQESFQoIY2F0ZWdvcnkYBCABKAlIAYgBARIXCgphY3Rpb25fdXJsGAUgASgJSAKIAQFCCgoIX21lc3NhZ2VCCwoJX2NhdGVnb3J5Qg0KC19hY3Rpb25fdXJsIjUKJFNlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb25SZXNwb25zZRINCgVjb3VudBgBIAEoBSIxCiNNYXJrQ3VzdG9tZXJOb3RpZmljYXRpb25SZWFkUmVxdWVzdBIKCgJpZBgBIAEoCSI3CiRNYXJrQ3VzdG9tZXJOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJTCidNYXJrQWxsQ3VzdG9tZXJOb3RpZmljYXRpb25zUmVhZFJlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBAUIOCgxfY3VzdG9tZXJfaWQiOQooTWFya0FsbEN1c3RvbWVyTm90aWZpY2F0aW9uc1JlYWRSZXNwb25zZRINCgVjb3VudBgBIAEoBSLQAQofTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVxdWVzdBIrCgV3aGVyZRgBIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARISCgVhZnRlchgCIAEoCUgBiAEBEhMKBmJlZm9yZRgDIAEoCUgCiAEBEhIKBWZpcnN0GAQgASgFSAOIAQESEQoEbGFzdBgFIAEoBUgEiAEBQggKBl93aGVyZUIICgZfYWZ0ZXJCCQoHX2JlZm9yZUIICgZfZmlyc3RCBwoFX2xhc3QivAEKIExpc3RQcm9qZWN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlEj0KDW5vdGlmaWNhdGlvbnMYASADKAsyJi5ub3RpZmljYXRpb25zLnYxLkN1c3RvbWVyTm90aWZpY2F0aW9uEg0KBXRvdGFsGAIgASgFEisKCXBhZ2VfaW5mbxgDIAEoCzITLmNvbW1vbi52MS5QYWdlSW5mb0gAiAEBEg8KB2N1cnNvcnMYBCADKAlCDAoKX3BhZ2VfaW5mbyJvChZOb3RpZmljYXRpb25QcmVmZXJlbmNlEhAKCGNhdGVnb3J5GAEgASgJEhUKDWVtYWlsX2VuYWJsZWQYAiABKAgSFAoMcHVzaF9lbmFibGVkGAMgASgIEhYKDmluX2FwcF9lbmFibGVkGAQgASgIIjgKIUdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUmVxdWVzdBITCgtjdXN0b21lcl9pZBgBIAEoCSJjCiJHZXROb3RpZmljYXRpb25QcmVmZXJlbmNlc1Jlc3BvbnNlEj0KC3ByZWZlcmVuY2VzGAEgAygLMigubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlItYBCiNVcGRhdGVOb3RpZmljYXRpb25QcmVmZXJlbmNlUmVxdWVzdBITCgtjdXN0b21lcl9pZBgBIAEoCRIQCghjYXRlZ29yeRgCIAEoCRIaCg1lbWFpbF9lbmFibGVkGAMgASgISACIAQESGQoMcHVzaF9lbmFibGVkGAQgASgISAGIAQESGwoOaW5fYXBwX2VuYWJsZWQYBSABKAhIAogBAUIQCg5fZW1haWxfZW5hYmxlZEIPCg1fcHVzaF9lbmFibGVkQhEKD19pbl9hcHBfZW5hYmxlZCI3CiRVcGRhdGVOb3RpZmljYXRpb25QcmVmZXJlbmNlUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJ8ChpSZWdpc3RlckRldmljZVRva2VuUmVxdWVzdBITCgtjdXN0b21lcl9pZBgBIAEoCRINCgV0b2tlbhgCIAEoCRIQCghwbGF0Zm9ybRgDIAEoCRIYCgtkZXZpY2VfbmFtZRgEIAEoCUgAiAEBQg4KDF9kZXZpY2VfbmFtZSIuChtSZWdpc3RlckRldmljZVRva2VuUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCItChxVbnJlZ2lzdGVyRGV2aWNlVG9rZW5SZXF1ZXN0Eg0KBXRva2VuGAEgASgJIjAKHVVucmVnaXN0ZXJEZXZpY2VUb2tlblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiyAMKDlB1c2hDcmVkZW50aWFsEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIcGxhdGZvcm0YAyABKAkSFgoJYnVuZGxlX2lkGAogASgJSACIAQESGQoMYXBuc190ZWFtX2lkGAsgASgJSAGIAQESGAoLYXBuc19rZXlfaWQYDCABKAlIAogBARIcCg9hcG5zX3Byb2R1Y3Rpb24YDSABKAhIA4gBARIbCg5mY21fcHJvamVjdF9pZBgUIAEoCUgEiAEBEh0KEGZjbV9jbGllbnRfZW1haWwYFSABKAlIBYgBARISCgpoYXNfc2VjcmV0GB4gASgIEi4KCmNyZWF0ZWRfYXQYMiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYMyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgwKCl9idW5kbGVfaWRCDwoNX2FwbnNfdGVhbV9pZEIOCgxfYXBuc19rZXlfaWRCEgoQX2FwbnNfcHJvZHVjdGlvbkIRCg9fZmNtX3Byb2plY3RfaWRCEwoRX2ZjbV9jbGllbnRfZW1haWwi3wIKG1VwbG9hZFB1c2hDcmVkZW50aWFsUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhAKCHBsYXRmb3JtGAIgASgJEhgKC2FwbnNfcDhfa2V5GAogASgJSACIAQESFgoJYnVuZGxlX2lkGAsgASgJSAGIAQESGQoMYXBuc190ZWFtX2lkGAwgASgJSAKIAQESGAoLYXBuc19rZXlfaWQYDSABKAlIA4gBARIcCg9hcG5zX3Byb2R1Y3Rpb24YDiABKAhIBIgBARIlChhmY21fc2VydmljZV9hY2NvdW50X2pzb24YFCABKAlIBYgBAUIOCgxfYXBuc19wOF9rZXlCDAoKX2J1bmRsZV9pZEIPCg1fYXBuc190ZWFtX2lkQg4KDF9hcG5zX2tleV9pZEISChBfYXBuc19wcm9kdWN0aW9uQhsKGV9mY21fc2VydmljZV9hY2NvdW50X2pzb24iVAocVXBsb2FkUHVzaENyZWRlbnRpYWxSZXNwb25zZRI0CgpjcmVkZW50aWFsGAEgASgLMiAubm90aWZpY2F0aW9ucy52MS5QdXNoQ3JlZGVudGlhbCIwChpMaXN0UHVzaENyZWRlbnRpYWxzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIlQKG0xpc3RQdXNoQ3JlZGVudGlhbHNSZXNwb25zZRI1CgtjcmVkZW50aWFscxgBIAMoCzIgLm5vdGlmaWNhdGlvbnMudjEuUHVzaENyZWRlbnRpYWwiKQobRGVsZXRlUHVzaENyZWRlbnRpYWxSZXF1ZXN0EgoKAmlkGAEgASgJIi8KHERlbGV0ZVB1c2hDcmVkZW50aWFsUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCrIAgoQTm90aWZpY2F0aW9uVHlwZRIhCh1OT1RJRklDQVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEiMKH05PVElGSUNBVElPTl9UWVBFX0pPQl9DT01QTEVURUQQARIgChxOT1RJRklDQVRJT05fVFlQRV9KT0JfRkFJTEVEEAISIgoeTk9USUZJQ0FUSU9OX1RZUEVfSk9CX1BST0dSRVNTEAMSHQoZTk9USUZJQ0FUSU9OX1RZUEVfTUVOVElPThAEEiAKHE5PVElGSUNBVElPTl9UWVBFX05PVEVfUkVQTFkQBRIjCh9OT1RJRklDQVRJT05fVFlQRV9OT1RFX1JFU09MVkVEEAYSHAoYTk9USUZJQ0FUSU9OX1RZUEVfU1lTVEVNEAcSIgoeTk9USUZJQ0FUSU9OX1RZUEVfQU5OT1VOQ0VNRU5UEAgq9QEKFk5vdGlmaWNhdGlvblNvdXJjZVR5cGUSKAokTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIwofTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX1JFQ09SRBABEiIKHk5PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9NT0RFTBACEiEKHU5PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9OT1RFEAMSIAocTk9USUZJQ0FUSU9OX1NPVVJDRV9UWVBFX0pPQhAEEiMKH05PVElGSUNBVElPTl9TT1VSQ0VfVFlQRV9TWVNURU0QBTL1EwoUTm90aWZpY2F0aW9uc1NlcnZpY2USbAoRTGlzdE5vdGlmaWNhdGlvbnMSKi5ub3RpZmljYXRpb25zLnYxLkxpc3ROb3RpZmljYXRpb25zUmVxdWVzdBorLm5vdGlmaWNhdGlvbnMudjEuTGlzdE5vdGlmaWNhdGlvbnNSZXNwb25zZRJjCg5HZXRVbnJlYWRDb3VudBInLm5vdGlmaWNhdGlvbnMudjEuR2V0VW5yZWFkQ291bnRSZXF1ZXN0Gigubm90aWZpY2F0aW9ucy52MS5HZXRVbnJlYWRDb3VudFJlc3BvbnNlEnUKFE1hcmtOb3RpZmljYXRpb25SZWFkEi0ubm90aWZpY2F0aW9ucy52MS5NYXJrTm90aWZpY2F0aW9uUmVhZFJlcXVlc3QaLi5ub3RpZmljYXRpb25zLnYxLk1hcmtOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USgQEKGE1hcmtBbGxOb3RpZmljYXRpb25zUmVhZBIxLm5vdGlmaWNhdGlvbnMudjEuTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USbwoSRGVsZXRlTm90aWZpY2F0aW9uEisubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25SZXF1ZXN0Giwubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25SZXNwb25zZRJpChBTZW5kQW5ub3VuY2VtZW50Eikubm90aWZpY2F0aW9ucy52MS5TZW5kQW5ub3VuY2VtZW50UmVxdWVzdBoqLm5vdGlmaWNhdGlvbnMudjEuU2VuZEFubm91bmNlbWVudFJlc3BvbnNlEn4KF0xpc3RBbm5vdW5jZW1lbnRIaXN0b3J5EjAubm90aWZpY2F0aW9ucy52MS5MaXN0QW5ub3VuY2VtZW50SGlzdG9yeVJlcXVlc3QaMS5ub3RpZmljYXRpb25zLnYxLkxpc3RBbm5vdW5jZW1lbnRIaXN0b3J5UmVzcG9uc2UShAEKGUxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnMSMi5ub3RpZmljYXRpb25zLnYxLkxpc3RDdXN0b21lck5vdGlmaWNhdGlvbnNSZXF1ZXN0GjMubm90aWZpY2F0aW9ucy52MS5MaXN0Q3VzdG9tZXJOb3RpZmljYXRpb25zUmVzcG9uc2USgQEKGFNlbmRDdXN0b21lck5vdGlmaWNhdGlvbhIxLm5vdGlmaWNhdGlvbnMudjEuU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uUmVzcG9uc2USjQEKHFNlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb24SNS5ub3RpZmljYXRpb25zLnYxLlNlbmRCdWxrQ3VzdG9tZXJOb3RpZmljYXRpb25SZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5TZW5kQnVsa0N1c3RvbWVyTm90aWZpY2F0aW9uUmVzcG9uc2USjQEKHE1hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWQSNS5ub3RpZmljYXRpb25zLnYxLk1hcmtDdXN0b21lck5vdGlmaWNhdGlvblJlYWRSZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5NYXJrQ3VzdG9tZXJOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USmQEKIE1hcmtBbGxDdXN0b21lck5vdGlmaWNhdGlvbnNSZWFkEjkubm90aWZpY2F0aW9ucy52MS5NYXJrQWxsQ3VzdG9tZXJOb3RpZmljYXRpb25zUmVhZFJlcXVlc3QaOi5ub3RpZmljYXRpb25zLnYxLk1hcmtBbGxDdXN0b21lck5vdGlmaWNhdGlvbnNSZWFkUmVzcG9uc2USgQEKGExpc3RQcm9qZWN0Tm90aWZpY2F0aW9ucxIxLm5vdGlmaWNhdGlvbnMudjEuTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVxdWVzdBoyLm5vdGlmaWNhdGlvbnMudjEuTGlzdFByb2plY3ROb3RpZmljYXRpb25zUmVzcG9uc2UShwEKGkdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzEjMubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25QcmVmZXJlbmNlc1JlcXVlc3QaNC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUmVzcG9uc2USjQEKHFVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2USNS5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2VSZXF1ZXN0GjYubm90aWZpY2F0aW9ucy52MS5VcGRhdGVOb3RpZmljYXRpb25QcmVmZXJlbmNlUmVzcG9uc2UScgoTUmVnaXN0ZXJEZXZpY2VUb2tlbhIsLm5vdGlmaWNhdGlvbnMudjEuUmVnaXN0ZXJEZXZpY2VUb2tlblJlcXVlc3QaLS5ub3RpZmljYXRpb25zLnYxLlJlZ2lzdGVyRGV2aWNlVG9rZW5SZXNwb25zZRJ4ChVVbnJlZ2lzdGVyRGV2aWNlVG9rZW4SLi5ub3RpZmljYXRpb25zLnYxLlVucmVnaXN0ZXJEZXZpY2VUb2tlblJlcXVlc3QaLy5ub3RpZmljYXRpb25zLnYxLlVucmVnaXN0ZXJEZXZpY2VUb2tlblJlc3BvbnNlEnUKFFVwbG9hZFB1c2hDcmVkZW50aWFsEi0ubm90aWZpY2F0aW9ucy52MS5VcGxvYWRQdXNoQ3JlZGVudGlhbFJlcXVlc3QaLi5ub3RpZmljYXRpb25zLnYxLlVwbG9hZFB1c2hDcmVkZW50aWFsUmVzcG9uc2UScgoTTGlzdFB1c2hDcmVkZW50aWFscxIsLm5vdGlmaWNhdGlvbnMudjEuTGlzdFB1c2hDcmVkZW50aWFsc1JlcXVlc3QaLS5ub3RpZmljYXRpb25zLnYxLkxpc3RQdXNoQ3JlZGVudGlhbHNSZXNwb25zZRJ1ChREZWxldGVQdXNoQ3JlZGVudGlhbBItLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlUHVzaENyZWRlbnRpYWxSZXF1ZXN0Gi4ubm90aWZpY2F0aW9ucy52MS5EZWxldGVQdXNoQ3JlZGVudGlhbFJlc3BvbnNlQkdaRWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9ub3RpZmljYXRpb25zL3YxO25vdGlmaWNhdGlvbnN2MWIGcHJvdG8z", [file_google_protobuf_struct10, file_google_protobuf_timestamp11, file_common_v1_pagination]);
|
|
803
806
|
var NotificationSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 0);
|
|
804
807
|
var ListNotificationsRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 1);
|
|
805
808
|
var MarkNotificationReadRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 3);
|
|
806
809
|
var MarkAllNotificationsReadRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 5);
|
|
810
|
+
var SendCustomerNotificationRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 18);
|
|
811
|
+
var RegisterDeviceTokenRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 34);
|
|
812
|
+
var UnregisterDeviceTokenRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 36);
|
|
813
|
+
var PushCredentialSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 38);
|
|
814
|
+
var UploadPushCredentialRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 39);
|
|
815
|
+
var ListPushCredentialsRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 41);
|
|
816
|
+
var DeletePushCredentialRequestSchema = /* @__PURE__ */ messageDesc14(file_notifications_v1_notifications, 43);
|
|
807
817
|
var NotificationsService = /* @__PURE__ */ serviceDesc10(file_notifications_v1_notifications, 0);
|
|
808
818
|
|
|
809
819
|
// ../../packages/proto-ts/src/schedules/v1/schedules_pb.js
|
|
@@ -1798,6 +1808,15 @@ function createModelsMethods(client) {
|
|
|
1798
1808
|
create3(PublishModelRequestSchema, { id })
|
|
1799
1809
|
);
|
|
1800
1810
|
return resp.model ?? null;
|
|
1811
|
+
},
|
|
1812
|
+
// Pending-publish state for one model: whether the draft diverges from
|
|
1813
|
+
// the published snapshot, and the severity-tagged change list. CLI push
|
|
1814
|
+
// reads this to decide whether an update is safe to auto-publish.
|
|
1815
|
+
async getModelPublishStatus(id) {
|
|
1816
|
+
const resp = await client.getModelPublishStatus(
|
|
1817
|
+
create3(GetModelPublishStatusRequestSchema, { id })
|
|
1818
|
+
);
|
|
1819
|
+
return resp.status ?? null;
|
|
1801
1820
|
}
|
|
1802
1821
|
};
|
|
1803
1822
|
}
|
|
@@ -3229,6 +3248,73 @@ function createNotificationsMethods(client) {
|
|
|
3229
3248
|
create11(MarkAllNotificationsReadRequestSchema, {})
|
|
3230
3249
|
);
|
|
3231
3250
|
return resp.count;
|
|
3251
|
+
},
|
|
3252
|
+
// ── Push Credentials ────────────────────────────────────────
|
|
3253
|
+
async listPushCredentials(params) {
|
|
3254
|
+
return client.listPushCredentials(
|
|
3255
|
+
create11(ListPushCredentialsRequestSchema, {
|
|
3256
|
+
projectId: params.projectId
|
|
3257
|
+
})
|
|
3258
|
+
);
|
|
3259
|
+
},
|
|
3260
|
+
async uploadPushCredential(params) {
|
|
3261
|
+
const resp = await client.uploadPushCredential(
|
|
3262
|
+
create11(UploadPushCredentialRequestSchema, {
|
|
3263
|
+
projectId: params.projectId,
|
|
3264
|
+
platform: params.platform,
|
|
3265
|
+
apnsP8Key: params.apnsP8Key,
|
|
3266
|
+
bundleId: params.bundleId,
|
|
3267
|
+
apnsTeamId: params.apnsTeamId,
|
|
3268
|
+
apnsKeyId: params.apnsKeyId,
|
|
3269
|
+
apnsProduction: params.apnsProduction,
|
|
3270
|
+
fcmServiceAccountJson: params.fcmServiceAccountJson
|
|
3271
|
+
})
|
|
3272
|
+
);
|
|
3273
|
+
return resp.credential ?? null;
|
|
3274
|
+
},
|
|
3275
|
+
async deletePushCredential(params) {
|
|
3276
|
+
const resp = await client.deletePushCredential(
|
|
3277
|
+
create11(DeletePushCredentialRequestSchema, { id: params.id })
|
|
3278
|
+
);
|
|
3279
|
+
return resp.success;
|
|
3280
|
+
},
|
|
3281
|
+
// ── Device Tokens ────────────────────────────────────────────
|
|
3282
|
+
async registerDeviceToken(params) {
|
|
3283
|
+
const resp = await client.registerDeviceToken(
|
|
3284
|
+
create11(RegisterDeviceTokenRequestSchema, {
|
|
3285
|
+
customerId: params.customerId,
|
|
3286
|
+
token: params.token,
|
|
3287
|
+
platform: params.platform,
|
|
3288
|
+
deviceName: params.deviceName
|
|
3289
|
+
})
|
|
3290
|
+
);
|
|
3291
|
+
return resp.success;
|
|
3292
|
+
},
|
|
3293
|
+
async unregisterDeviceToken(token) {
|
|
3294
|
+
const resp = await client.unregisterDeviceToken(
|
|
3295
|
+
create11(UnregisterDeviceTokenRequestSchema, { token })
|
|
3296
|
+
);
|
|
3297
|
+
return resp.success;
|
|
3298
|
+
},
|
|
3299
|
+
// ── Customer Notifications ───────────────────────────────────
|
|
3300
|
+
async sendCustomerNotification(params) {
|
|
3301
|
+
const resp = await client.sendCustomerNotification(
|
|
3302
|
+
create11(SendCustomerNotificationRequestSchema, {
|
|
3303
|
+
customerId: params.customerId,
|
|
3304
|
+
title: params.title,
|
|
3305
|
+
message: params.message,
|
|
3306
|
+
category: params.category,
|
|
3307
|
+
actionUrl: params.actionUrl,
|
|
3308
|
+
deepLink: params.deepLink,
|
|
3309
|
+
badge: params.badge,
|
|
3310
|
+
threadId: params.threadId,
|
|
3311
|
+
emailSubject: params.emailSubject,
|
|
3312
|
+
emailBody: params.emailBody,
|
|
3313
|
+
emailReplyTo: params.emailReplyTo,
|
|
3314
|
+
emailCtas: params.emailCtas
|
|
3315
|
+
})
|
|
3316
|
+
);
|
|
3317
|
+
return resp.notification ?? null;
|
|
3232
3318
|
}
|
|
3233
3319
|
};
|
|
3234
3320
|
}
|
|
@@ -5968,6 +6054,13 @@ function discoverConfigFile() {
|
|
|
5968
6054
|
}
|
|
5969
6055
|
return null;
|
|
5970
6056
|
}
|
|
6057
|
+
function classifyAdditivePublish(changes) {
|
|
6058
|
+
if (changes.length === 0) return "skip";
|
|
6059
|
+
const hasBlocking = changes.some(
|
|
6060
|
+
(c) => c.severity === BreakingChangeSeverity.BREAKING || c.severity === BreakingChangeSeverity.WARNING
|
|
6061
|
+
);
|
|
6062
|
+
return hasBlocking ? "draft" : "publish";
|
|
6063
|
+
}
|
|
5971
6064
|
function syncEnvVar(envPath, key, value) {
|
|
5972
6065
|
const envContent = existsSync4(envPath) ? readFileSync(envPath, "utf-8") : "";
|
|
5973
6066
|
const pattern = new RegExp(`^${key}=(.*)$`, "m");
|
|
@@ -6025,7 +6118,7 @@ function registerPushCommand(program2, globalOpts) {
|
|
|
6025
6118
|
false
|
|
6026
6119
|
).option(
|
|
6027
6120
|
"--publish",
|
|
6028
|
-
"Promote updated
|
|
6121
|
+
"Promote ALL updated resources \u2014 including breaking model changes \u2014 to the published channel after the push. By default, new resources and additive model updates auto-publish, while breaking model changes and updated operations / auth providers / profile schema are left as drafts; this flag releases them too.",
|
|
6029
6122
|
false
|
|
6030
6123
|
).option(
|
|
6031
6124
|
"--rebuild",
|
|
@@ -6124,17 +6217,30 @@ function registerPushCommand(program2, globalOpts) {
|
|
|
6124
6217
|
console.log(` Config Key: ${chalk6.cyan(config2.key)}`);
|
|
6125
6218
|
console.log();
|
|
6126
6219
|
printSummary(summary);
|
|
6127
|
-
|
|
6128
|
-
|
|
6129
|
-
|
|
6130
|
-
|
|
6131
|
-
|
|
6132
|
-
|
|
6133
|
-
|
|
6134
|
-
|
|
6220
|
+
const publishCounts = {
|
|
6221
|
+
models: 0,
|
|
6222
|
+
operations: 0,
|
|
6223
|
+
authProviders: 0,
|
|
6224
|
+
profileSchema: false
|
|
6225
|
+
};
|
|
6226
|
+
const draftedBreakingModelIds = [];
|
|
6227
|
+
for (const id of summary.updatedModelIds) {
|
|
6228
|
+
if (opts.publish) {
|
|
6229
|
+
await client.models.publishModel(id);
|
|
6230
|
+
publishCounts.models++;
|
|
6231
|
+
continue;
|
|
6232
|
+
}
|
|
6233
|
+
const status = await client.models.getModelPublishStatus(id);
|
|
6234
|
+
const decision = classifyAdditivePublish(status?.breakingChanges ?? []);
|
|
6235
|
+
if (decision === "skip") continue;
|
|
6236
|
+
if (decision === "draft") {
|
|
6237
|
+
draftedBreakingModelIds.push(id);
|
|
6238
|
+
} else {
|
|
6135
6239
|
await client.models.publishModel(id);
|
|
6136
6240
|
publishCounts.models++;
|
|
6137
6241
|
}
|
|
6242
|
+
}
|
|
6243
|
+
if (opts.publish) {
|
|
6138
6244
|
for (const id of summary.updatedOperationIds) {
|
|
6139
6245
|
await client.operations.publishOperation(id);
|
|
6140
6246
|
publishCounts.operations++;
|
|
@@ -6147,30 +6253,34 @@ function registerPushCommand(program2, globalOpts) {
|
|
|
6147
6253
|
await client.settings.publishProfileSchema();
|
|
6148
6254
|
publishCounts.profileSchema = true;
|
|
6149
6255
|
}
|
|
6150
|
-
|
|
6151
|
-
|
|
6152
|
-
|
|
6153
|
-
|
|
6154
|
-
|
|
6155
|
-
|
|
6156
|
-
|
|
6157
|
-
|
|
6158
|
-
|
|
6256
|
+
}
|
|
6257
|
+
const lines = [];
|
|
6258
|
+
if (publishCounts.models) lines.push(`${publishCounts.models} models`);
|
|
6259
|
+
if (publishCounts.operations)
|
|
6260
|
+
lines.push(`${publishCounts.operations} operations`);
|
|
6261
|
+
if (publishCounts.authProviders)
|
|
6262
|
+
lines.push(`${publishCounts.authProviders} auth providers`);
|
|
6263
|
+
if (publishCounts.profileSchema) lines.push("profile schema");
|
|
6264
|
+
if (summary.designTokensPublished) lines.push("design tokens");
|
|
6265
|
+
if (lines.length > 0) {
|
|
6159
6266
|
console.log();
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
|
|
6163
|
-
|
|
6164
|
-
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6267
|
+
const how = opts.publish ? "Published" : "Published (additive)";
|
|
6268
|
+
console.log(chalk6.green(`\u2713 ${how}: `) + chalk6.dim(lines.join(", ")));
|
|
6269
|
+
}
|
|
6270
|
+
if (draftedBreakingModelIds.length > 0) {
|
|
6271
|
+
const n = draftedBreakingModelIds.length;
|
|
6272
|
+
console.log();
|
|
6273
|
+
console.log(
|
|
6274
|
+
chalk6.yellow(
|
|
6275
|
+
` ${n} model${n === 1 ? "" : "s"} with breaking changes left as drafts. Re-run with --publish to release ${n === 1 ? "it" : "them"}, or publish from the admin app.`
|
|
6276
|
+
)
|
|
6277
|
+
);
|
|
6278
|
+
}
|
|
6279
|
+
if (!opts.publish && (summary.updatedOperationIds.length + summary.updatedAuthProviderIds.length > 0 || summary.profileSchemaUpdated || summary.designTokensUpdated)) {
|
|
6170
6280
|
console.log();
|
|
6171
6281
|
console.log(
|
|
6172
6282
|
chalk6.dim(
|
|
6173
|
-
"
|
|
6283
|
+
" Updated operations / auth providers / profile schema / design tokens left as drafts. Re-run with --publish to release them."
|
|
6174
6284
|
)
|
|
6175
6285
|
);
|
|
6176
6286
|
}
|
|
@@ -9450,6 +9560,140 @@ function registerNotificationsCommands(program2, globalOpts) {
|
|
|
9450
9560
|
);
|
|
9451
9561
|
}
|
|
9452
9562
|
|
|
9563
|
+
// src/commands/push-credentials.ts
|
|
9564
|
+
import { existsSync as existsSync7, readFileSync as readFileSync3 } from "fs";
|
|
9565
|
+
import { resolve as resolve7 } from "path";
|
|
9566
|
+
function registerPushCredentialsCommands(program2, globalOpts) {
|
|
9567
|
+
const cmd = program2.command("push-credentials").alias("push-creds").description("Manage per-project push credentials (APNs / FCM)");
|
|
9568
|
+
cmd.command("list").description("List push credentials for the current project").action(
|
|
9569
|
+
withErrorHandler(globalOpts, async () => {
|
|
9570
|
+
const opts = globalOpts();
|
|
9571
|
+
const resolved = await requireProject(opts);
|
|
9572
|
+
const client = await createPlatformClient(opts);
|
|
9573
|
+
const resp = await client.notifications.listPushCredentials({
|
|
9574
|
+
projectId: resolved.project.id
|
|
9575
|
+
});
|
|
9576
|
+
formatListProto(PushCredentialSchema, resp.credentials, opts, {
|
|
9577
|
+
columns: [
|
|
9578
|
+
{ key: "id", header: "ID", width: 28 },
|
|
9579
|
+
{ key: "platform", header: "Platform", width: 10 },
|
|
9580
|
+
{
|
|
9581
|
+
key: "bundleId",
|
|
9582
|
+
header: "Bundle ID",
|
|
9583
|
+
width: 28,
|
|
9584
|
+
format: (v) => v ? String(v) : ""
|
|
9585
|
+
},
|
|
9586
|
+
{
|
|
9587
|
+
key: "fcmProjectId",
|
|
9588
|
+
header: "FCM project",
|
|
9589
|
+
width: 22,
|
|
9590
|
+
format: (v) => v ? String(v) : ""
|
|
9591
|
+
},
|
|
9592
|
+
{
|
|
9593
|
+
key: "apnsProduction",
|
|
9594
|
+
header: "Env",
|
|
9595
|
+
width: 8,
|
|
9596
|
+
format: (v) => {
|
|
9597
|
+
if (v === true) return "prod";
|
|
9598
|
+
if (v === false) return "sandbox";
|
|
9599
|
+
return "";
|
|
9600
|
+
}
|
|
9601
|
+
},
|
|
9602
|
+
{
|
|
9603
|
+
key: "updatedAt",
|
|
9604
|
+
header: "Updated",
|
|
9605
|
+
width: 12,
|
|
9606
|
+
format: (v) => {
|
|
9607
|
+
if (!v) return "";
|
|
9608
|
+
const d = new Date(v);
|
|
9609
|
+
if (Number.isNaN(d.getTime())) return "";
|
|
9610
|
+
return d.toLocaleDateString();
|
|
9611
|
+
}
|
|
9612
|
+
}
|
|
9613
|
+
]
|
|
9614
|
+
});
|
|
9615
|
+
})
|
|
9616
|
+
);
|
|
9617
|
+
cmd.command("upload-ios").description("Upload an APNs (.p8) credential for iOS").requiredOption("--p8 <path>", "Path to the APNs .p8 private key").requiredOption("--bundle-id <id>", "iOS app bundle identifier").requiredOption("--team-id <id>", "Apple Developer Team ID (10 chars)").requiredOption("--key-id <id>", "APNs Key ID (10 chars)").option("--production", "Use the production APNs endpoint (default: sandbox)").action(
|
|
9618
|
+
withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
9619
|
+
const opts = globalOpts();
|
|
9620
|
+
const resolved = await requireProject(opts);
|
|
9621
|
+
const client = await createPlatformClient(opts);
|
|
9622
|
+
const p8Path = resolve7(String(cmdOpts.p8));
|
|
9623
|
+
if (!existsSync7(p8Path)) {
|
|
9624
|
+
throw new Error(`APNs .p8 file not found: ${p8Path}`);
|
|
9625
|
+
}
|
|
9626
|
+
const p8 = readFileSync3(p8Path, "utf-8");
|
|
9627
|
+
const cred = await client.notifications.uploadPushCredential({
|
|
9628
|
+
projectId: resolved.project.id,
|
|
9629
|
+
platform: "ios",
|
|
9630
|
+
apnsP8Key: p8,
|
|
9631
|
+
bundleId: String(cmdOpts.bundleId),
|
|
9632
|
+
apnsTeamId: String(cmdOpts.teamId),
|
|
9633
|
+
apnsKeyId: String(cmdOpts.keyId),
|
|
9634
|
+
apnsProduction: Boolean(cmdOpts.production)
|
|
9635
|
+
});
|
|
9636
|
+
if (cred) formatOutputProto(PushCredentialSchema, cred, opts);
|
|
9637
|
+
if (!(opts.json || opts.jsonl || opts.quiet)) {
|
|
9638
|
+
success(
|
|
9639
|
+
`Uploaded iOS push credential for ${cmdOpts.bundleId} (${cmdOpts.production ? "production" : "sandbox"})`
|
|
9640
|
+
);
|
|
9641
|
+
}
|
|
9642
|
+
})
|
|
9643
|
+
);
|
|
9644
|
+
cmd.command("upload-android").description("Upload an FCM service-account JSON for Android").requiredOption(
|
|
9645
|
+
"--service-account <path>",
|
|
9646
|
+
"Path to the Firebase service-account JSON"
|
|
9647
|
+
).action(
|
|
9648
|
+
withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
9649
|
+
const opts = globalOpts();
|
|
9650
|
+
const resolved = await requireProject(opts);
|
|
9651
|
+
const client = await createPlatformClient(opts);
|
|
9652
|
+
const jsonPath = resolve7(String(cmdOpts.serviceAccount));
|
|
9653
|
+
if (!existsSync7(jsonPath)) {
|
|
9654
|
+
throw new Error(`Service account JSON not found: ${jsonPath}`);
|
|
9655
|
+
}
|
|
9656
|
+
const json = readFileSync3(jsonPath, "utf-8");
|
|
9657
|
+
try {
|
|
9658
|
+
const parsed = JSON.parse(json);
|
|
9659
|
+
if (!parsed.project_id) {
|
|
9660
|
+
throw new Error("service-account JSON is missing project_id");
|
|
9661
|
+
}
|
|
9662
|
+
} catch (err) {
|
|
9663
|
+
throw new Error(`Invalid service account JSON: ${err.message}`);
|
|
9664
|
+
}
|
|
9665
|
+
const cred = await client.notifications.uploadPushCredential({
|
|
9666
|
+
projectId: resolved.project.id,
|
|
9667
|
+
platform: "android",
|
|
9668
|
+
fcmServiceAccountJson: json
|
|
9669
|
+
});
|
|
9670
|
+
if (cred) formatOutputProto(PushCredentialSchema, cred, opts);
|
|
9671
|
+
if (!(opts.json || opts.jsonl || opts.quiet)) {
|
|
9672
|
+
success("Uploaded Android push credential");
|
|
9673
|
+
}
|
|
9674
|
+
})
|
|
9675
|
+
);
|
|
9676
|
+
cmd.command("delete <id>").description("Delete a push credential by id").action(
|
|
9677
|
+
withErrorHandler(globalOpts, async (id) => {
|
|
9678
|
+
const opts = globalOpts();
|
|
9679
|
+
const client = await createPlatformClient(opts);
|
|
9680
|
+
await client.notifications.deletePushCredential({ id });
|
|
9681
|
+
if (!(opts.json || opts.jsonl || opts.quiet)) {
|
|
9682
|
+
success(`Deleted push credential ${id}`);
|
|
9683
|
+
}
|
|
9684
|
+
})
|
|
9685
|
+
);
|
|
9686
|
+
}
|
|
9687
|
+
async function requireProject(opts) {
|
|
9688
|
+
const resolved = await resolveProjectContext(opts);
|
|
9689
|
+
if (!resolved) {
|
|
9690
|
+
throw new Error(
|
|
9691
|
+
"No project selected. Run `foir select-project` or set FOIR_PROJECT."
|
|
9692
|
+
);
|
|
9693
|
+
}
|
|
9694
|
+
return resolved;
|
|
9695
|
+
}
|
|
9696
|
+
|
|
9453
9697
|
// src/commands/configs.ts
|
|
9454
9698
|
function registerConfigsCommands(program2, globalOpts) {
|
|
9455
9699
|
const configs = program2.command("configs").description("Manage configs (apps, webhooks)");
|
|
@@ -9525,7 +9769,7 @@ function registerConfigsCommands(program2, globalOpts) {
|
|
|
9525
9769
|
// src/commands/apps.ts
|
|
9526
9770
|
import chalk17 from "chalk";
|
|
9527
9771
|
import { spawn as spawn2 } from "child_process";
|
|
9528
|
-
import { existsSync as
|
|
9772
|
+
import { existsSync as existsSync8, watch as fsWatch } from "fs";
|
|
9529
9773
|
import { resolve as resolvePath } from "path";
|
|
9530
9774
|
|
|
9531
9775
|
// src/lib/tunnel.ts
|
|
@@ -9540,7 +9784,7 @@ async function startTunnel(opts) {
|
|
|
9540
9784
|
}
|
|
9541
9785
|
var CLOUDFLARED_URL_RE = /https:\/\/[a-z0-9-]+\.trycloudflare\.com/i;
|
|
9542
9786
|
function startCloudflared(host, port, logs) {
|
|
9543
|
-
return new Promise((
|
|
9787
|
+
return new Promise((resolve9, reject) => {
|
|
9544
9788
|
let child;
|
|
9545
9789
|
try {
|
|
9546
9790
|
child = spawn(
|
|
@@ -9574,7 +9818,7 @@ function startCloudflared(host, port, logs) {
|
|
|
9574
9818
|
resolved = true;
|
|
9575
9819
|
const url = match[0];
|
|
9576
9820
|
const exited = waitForExit(child);
|
|
9577
|
-
|
|
9821
|
+
resolve9({
|
|
9578
9822
|
url,
|
|
9579
9823
|
exited,
|
|
9580
9824
|
stop: () => stopChild(child)
|
|
@@ -9604,7 +9848,7 @@ ${buffered}`));
|
|
|
9604
9848
|
});
|
|
9605
9849
|
}
|
|
9606
9850
|
function startNgrok(port, logs) {
|
|
9607
|
-
return new Promise((
|
|
9851
|
+
return new Promise((resolve9, reject) => {
|
|
9608
9852
|
let child;
|
|
9609
9853
|
try {
|
|
9610
9854
|
child = spawn("ngrok", ["http", String(port), "--log=stdout"], {
|
|
@@ -9640,7 +9884,7 @@ function startNgrok(port, logs) {
|
|
|
9640
9884
|
const https = data.tunnels.find((t) => t.public_url.startsWith("https://"));
|
|
9641
9885
|
if (https) {
|
|
9642
9886
|
resolved = true;
|
|
9643
|
-
|
|
9887
|
+
resolve9({
|
|
9644
9888
|
url: https.public_url,
|
|
9645
9889
|
exited: waitForExit(child),
|
|
9646
9890
|
stop: () => stopChild(child)
|
|
@@ -9685,7 +9929,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9685
9929
|
apps.command("list").description("List installed apps").action(
|
|
9686
9930
|
withErrorHandler(globalOpts, async () => {
|
|
9687
9931
|
const opts = globalOpts();
|
|
9688
|
-
const resolved = await
|
|
9932
|
+
const resolved = await requireProject2(opts);
|
|
9689
9933
|
const client = await createPlatformClient(opts);
|
|
9690
9934
|
const resp = await client.apps.listApps({
|
|
9691
9935
|
tenantId: resolved.project.tenantId,
|
|
@@ -9719,7 +9963,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9719
9963
|
apps.command("get <name>").description("Get an installed app by name").action(
|
|
9720
9964
|
withErrorHandler(globalOpts, async (name) => {
|
|
9721
9965
|
const opts = globalOpts();
|
|
9722
|
-
const resolved = await
|
|
9966
|
+
const resolved = await requireProject2(opts);
|
|
9723
9967
|
const client = await createPlatformClient(opts);
|
|
9724
9968
|
const app = await client.apps.getApp(
|
|
9725
9969
|
resolved.project.tenantId,
|
|
@@ -9744,7 +9988,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9744
9988
|
globalOpts,
|
|
9745
9989
|
async (manifestUrl, cmdOpts) => {
|
|
9746
9990
|
const opts = globalOpts();
|
|
9747
|
-
const resolved = await
|
|
9991
|
+
const resolved = await requireProject2(opts);
|
|
9748
9992
|
const client = await createPlatformClient(opts);
|
|
9749
9993
|
const installResp = await client.apps.installApp(
|
|
9750
9994
|
resolved.project.tenantId,
|
|
@@ -9803,7 +10047,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9803
10047
|
globalOpts,
|
|
9804
10048
|
async (name, cmdOpts) => {
|
|
9805
10049
|
const opts = globalOpts();
|
|
9806
|
-
const resolved = await
|
|
10050
|
+
const resolved = await requireProject2(opts);
|
|
9807
10051
|
const client = await createPlatformClient(opts);
|
|
9808
10052
|
const updateResp = await client.apps.updateApp(
|
|
9809
10053
|
resolved.project.tenantId,
|
|
@@ -9851,7 +10095,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9851
10095
|
globalOpts,
|
|
9852
10096
|
async (name, cmdOpts) => {
|
|
9853
10097
|
const opts = globalOpts();
|
|
9854
|
-
const resolved = await
|
|
10098
|
+
const resolved = await requireProject2(opts);
|
|
9855
10099
|
const client = await createPlatformClient(opts);
|
|
9856
10100
|
const resp = await client.apps.uninstallApp(
|
|
9857
10101
|
resolved.project.tenantId,
|
|
@@ -9873,7 +10117,7 @@ function registerAppsCommands(program2, globalOpts) {
|
|
|
9873
10117
|
globalOpts,
|
|
9874
10118
|
async (appName, operationKey, cmdOpts) => {
|
|
9875
10119
|
const opts = globalOpts();
|
|
9876
|
-
const resolved = await
|
|
10120
|
+
const resolved = await requireProject2(opts);
|
|
9877
10121
|
const client = await createPlatformClient(opts);
|
|
9878
10122
|
const stored = operationKey.includes("/") ? operationKey : `${appName}/${operationKey}`;
|
|
9879
10123
|
const input = cmdOpts.data ? JSON.parse(String(cmdOpts.data)) : void 0;
|
|
@@ -10038,7 +10282,7 @@ function hostOf(url) {
|
|
|
10038
10282
|
}
|
|
10039
10283
|
}
|
|
10040
10284
|
function runPush(host, jsonMode) {
|
|
10041
|
-
return new Promise((
|
|
10285
|
+
return new Promise((resolve9, reject) => {
|
|
10042
10286
|
if (!jsonMode) {
|
|
10043
10287
|
console.log();
|
|
10044
10288
|
console.log(chalk17.dim(`\u2192 foir push (${FOIR_APPS_HOST_ENV}=${host})`));
|
|
@@ -10054,14 +10298,14 @@ function runPush(host, jsonMode) {
|
|
|
10054
10298
|
});
|
|
10055
10299
|
child.once("error", (err) => reject(err));
|
|
10056
10300
|
child.once("exit", (code) => {
|
|
10057
|
-
if (code === 0)
|
|
10301
|
+
if (code === 0) resolve9();
|
|
10058
10302
|
else reject(new Error(`foir push exited with code ${code ?? "null"}`));
|
|
10059
10303
|
});
|
|
10060
10304
|
});
|
|
10061
10305
|
}
|
|
10062
10306
|
function startWatchLoop(host, jsonMode) {
|
|
10063
10307
|
const cwd = process.cwd();
|
|
10064
|
-
const target = WATCH_FILES.map((n) => resolvePath(cwd, n)).find((p) =>
|
|
10308
|
+
const target = WATCH_FILES.map((n) => resolvePath(cwd, n)).find((p) => existsSync8(p));
|
|
10065
10309
|
if (!target) {
|
|
10066
10310
|
if (!jsonMode) {
|
|
10067
10311
|
console.error(chalk17.yellow(`! --watch: no foir.config.* in ${cwd}; skipping watch loop.`));
|
|
@@ -10095,21 +10339,21 @@ function startWatchLoop(host, jsonMode) {
|
|
|
10095
10339
|
return watcher;
|
|
10096
10340
|
}
|
|
10097
10341
|
function runWatchLoop(host, jsonMode) {
|
|
10098
|
-
return new Promise((
|
|
10342
|
+
return new Promise((resolve9) => {
|
|
10099
10343
|
const watcher = startWatchLoop(host, jsonMode);
|
|
10100
10344
|
if (!watcher) {
|
|
10101
|
-
|
|
10345
|
+
resolve9();
|
|
10102
10346
|
return;
|
|
10103
10347
|
}
|
|
10104
10348
|
const close = () => {
|
|
10105
10349
|
watcher.close();
|
|
10106
|
-
|
|
10350
|
+
resolve9();
|
|
10107
10351
|
};
|
|
10108
10352
|
process.once("SIGINT", close);
|
|
10109
10353
|
process.once("SIGTERM", close);
|
|
10110
10354
|
});
|
|
10111
10355
|
}
|
|
10112
|
-
async function
|
|
10356
|
+
async function requireProject2(opts) {
|
|
10113
10357
|
const resolved = await resolveProjectContext(opts);
|
|
10114
10358
|
if (!resolved) {
|
|
10115
10359
|
throw new Error(
|
|
@@ -10140,7 +10384,7 @@ function classToLabel(n) {
|
|
|
10140
10384
|
}
|
|
10141
10385
|
|
|
10142
10386
|
// src/commands/secrets.ts
|
|
10143
|
-
import { existsSync as
|
|
10387
|
+
import { existsSync as existsSync9 } from "fs";
|
|
10144
10388
|
import { promises as fs5 } from "fs";
|
|
10145
10389
|
import { resolve as resolvePath2 } from "path";
|
|
10146
10390
|
function registerSecretsCommands(program2, globalOpts) {
|
|
@@ -10148,7 +10392,7 @@ function registerSecretsCommands(program2, globalOpts) {
|
|
|
10148
10392
|
secrets.command("put").description("Store a new secret and print its ref").option("--label <label>", "Optional human-readable label").option("--app <name>", "Owner: app name (defaults to project-owned)").option("--file <path>", "Read plaintext from file (binary-safe)").option("--value <plaintext>", "Plaintext value (string only; prefer --file for binary)").action(
|
|
10149
10393
|
withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
10150
10394
|
const opts = globalOpts();
|
|
10151
|
-
const resolved = await
|
|
10395
|
+
const resolved = await requireProject3(opts);
|
|
10152
10396
|
const plaintext = await readPlaintext(cmdOpts);
|
|
10153
10397
|
const client = await createPlatformClient(opts);
|
|
10154
10398
|
const ownerKind = cmdOpts.app ? OwnerKind.APP : OwnerKind.PROJECT;
|
|
@@ -10175,7 +10419,7 @@ function registerSecretsCommands(program2, globalOpts) {
|
|
|
10175
10419
|
secrets.command("list").description("List secrets metadata (no plaintext)").option("--app <name>", "List app-owned secrets for this app").option("--include-soft-deleted", "Include soft-deleted entries").action(
|
|
10176
10420
|
withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
10177
10421
|
const opts = globalOpts();
|
|
10178
|
-
const resolved = await
|
|
10422
|
+
const resolved = await requireProject3(opts);
|
|
10179
10423
|
const client = await createPlatformClient(opts);
|
|
10180
10424
|
const ownerKind = cmdOpts.app ? OwnerKind.APP : OwnerKind.PROJECT;
|
|
10181
10425
|
const resp = await client.secrets.list({
|
|
@@ -10266,7 +10510,7 @@ function registerSecretsCommands(program2, globalOpts) {
|
|
|
10266
10510
|
).option("--config <path>", "Path to foir.secrets.ts (default: auto-discover)").option("--plaintext <path>", "Path to local.foir.secrets.ts (default: auto-discover)").option("--rotate", "Rotate plaintext for secrets that already exist").option("--dry-run", "Show what would change without calling PutSecret/RotateSecret").action(
|
|
10267
10511
|
withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
10268
10512
|
const opts = globalOpts();
|
|
10269
|
-
const resolved = await
|
|
10513
|
+
const resolved = await requireProject3(opts);
|
|
10270
10514
|
const configPath = await resolveSecretsConfigPath(
|
|
10271
10515
|
typeof cmdOpts.config === "string" ? cmdOpts.config : void 0
|
|
10272
10516
|
);
|
|
@@ -10376,7 +10620,7 @@ function registerSecretsCommands(program2, globalOpts) {
|
|
|
10376
10620
|
console.log("Aborted.");
|
|
10377
10621
|
return;
|
|
10378
10622
|
}
|
|
10379
|
-
const resolved = await
|
|
10623
|
+
const resolved = await requireProject3(opts);
|
|
10380
10624
|
const client = await createPlatformClient(opts);
|
|
10381
10625
|
const count = await client.secrets.purge({
|
|
10382
10626
|
tenantId: resolved.project.tenantId,
|
|
@@ -10386,7 +10630,7 @@ function registerSecretsCommands(program2, globalOpts) {
|
|
|
10386
10630
|
})
|
|
10387
10631
|
);
|
|
10388
10632
|
}
|
|
10389
|
-
async function
|
|
10633
|
+
async function requireProject3(opts) {
|
|
10390
10634
|
const resolved = await resolveProjectContext(opts);
|
|
10391
10635
|
if (!resolved) {
|
|
10392
10636
|
throw new Error(
|
|
@@ -10441,14 +10685,14 @@ var PLAINTEXT_CONFIG_NAMES = [
|
|
|
10441
10685
|
];
|
|
10442
10686
|
async function resolveSecretsConfigPath(explicit) {
|
|
10443
10687
|
if (explicit) {
|
|
10444
|
-
if (!
|
|
10688
|
+
if (!existsSync9(explicit)) {
|
|
10445
10689
|
throw new Error(`Secrets config not found: ${explicit}`);
|
|
10446
10690
|
}
|
|
10447
10691
|
return resolvePath2(explicit);
|
|
10448
10692
|
}
|
|
10449
10693
|
for (const name of SECRETS_CONFIG_NAMES) {
|
|
10450
10694
|
const path3 = resolvePath2(process.cwd(), name);
|
|
10451
|
-
if (
|
|
10695
|
+
if (existsSync9(path3)) return path3;
|
|
10452
10696
|
}
|
|
10453
10697
|
throw new Error(
|
|
10454
10698
|
`No secrets config found. Looked for: ${SECRETS_CONFIG_NAMES.join(", ")}.`
|
|
@@ -10456,14 +10700,14 @@ async function resolveSecretsConfigPath(explicit) {
|
|
|
10456
10700
|
}
|
|
10457
10701
|
async function resolvePlaintextPath(explicit) {
|
|
10458
10702
|
if (explicit) {
|
|
10459
|
-
if (!
|
|
10703
|
+
if (!existsSync9(explicit)) {
|
|
10460
10704
|
throw new Error(`Plaintext file not found: ${explicit}`);
|
|
10461
10705
|
}
|
|
10462
10706
|
return resolvePath2(explicit);
|
|
10463
10707
|
}
|
|
10464
10708
|
for (const name of PLAINTEXT_CONFIG_NAMES) {
|
|
10465
10709
|
const path3 = resolvePath2(process.cwd(), name);
|
|
10466
|
-
if (
|
|
10710
|
+
if (existsSync9(path3)) return path3;
|
|
10467
10711
|
}
|
|
10468
10712
|
return null;
|
|
10469
10713
|
}
|
|
@@ -10546,7 +10790,7 @@ function formatPushPlan(plan, opts) {
|
|
|
10546
10790
|
// src/cli.ts
|
|
10547
10791
|
var __filename = fileURLToPath(import.meta.url);
|
|
10548
10792
|
var __dirname = dirname4(__filename);
|
|
10549
|
-
config({ path:
|
|
10793
|
+
config({ path: resolve8(__dirname, "../.env.local") });
|
|
10550
10794
|
var require2 = createRequire(import.meta.url);
|
|
10551
10795
|
var { version } = require2("../package.json");
|
|
10552
10796
|
var program = new Command();
|
|
@@ -10594,6 +10838,7 @@ registerVariantCatalogCommands(program, getGlobalOpts);
|
|
|
10594
10838
|
registerFilesCommands(program, getGlobalOpts);
|
|
10595
10839
|
registerNotesCommands(program, getGlobalOpts);
|
|
10596
10840
|
registerNotificationsCommands(program, getGlobalOpts);
|
|
10841
|
+
registerPushCredentialsCommands(program, getGlobalOpts);
|
|
10597
10842
|
registerConfigsCommands(program, getGlobalOpts);
|
|
10598
10843
|
registerAppsCommands(program, getGlobalOpts);
|
|
10599
10844
|
registerSecretsCommands(program, getGlobalOpts);
|