@learncard/learn-cloud-plugin 2.3.39 → 2.3.41

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.
@@ -21235,14 +21235,22 @@ var UnsignedVCValidator = external_exports.object({
21235
21235
  }).catchall(external_exports.any());
21236
21236
  var ProofValidator = external_exports.object({
21237
21237
  type: external_exports.string(),
21238
- created: external_exports.string(),
21238
+ created: external_exports.string().optional(),
21239
21239
  challenge: external_exports.string().optional(),
21240
21240
  domain: external_exports.string().optional(),
21241
21241
  nonce: external_exports.string().optional(),
21242
21242
  proofPurpose: external_exports.string(),
21243
21243
  verificationMethod: external_exports.string(),
21244
21244
  jws: external_exports.string().optional()
21245
- }).catchall(external_exports.any());
21245
+ }).catchall(external_exports.any()).superRefine((proof, ctx) => {
21246
+ if (proof.created === void 0 && (proof.type !== "DataIntegrityProof" || proof.cryptosuite !== "ecdsa-rdfc-2019")) {
21247
+ ctx.addIssue({
21248
+ code: "custom",
21249
+ path: ["created"],
21250
+ message: "created is required for this proof suite"
21251
+ });
21252
+ }
21253
+ });
21246
21254
  var VCValidator = UnsignedVCValidator.extend({
21247
21255
  proof: ProofValidator.or(ProofValidator.array())
21248
21256
  });
@@ -22003,7 +22011,10 @@ var SendOptionsValidator = external_exports.object({
22003
22011
  webhookUrl: external_exports.string().url().optional().describe("Webhook URL to receive claim notifications"),
22004
22012
  suppressDelivery: external_exports.boolean().optional().describe("If true, returns claimUrl without sending email/SMS"),
22005
22013
  branding: SendBrandingOptionsValidator.optional().describe("Branding for email/SMS delivery"),
22006
- guardianEmail: external_exports.string().email().optional().describe("Guardian email that must approve before student can claim")
22014
+ guardianEmail: external_exports.string().email().optional().describe("Guardian email that must approve before student can claim"),
22015
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22016
+ "How many days the credential stays claimable in the Universal Inbox (default 30). Does not change the credential validity period."
22017
+ )
22007
22018
  });
22008
22019
  var SendBoostInputValidator = external_exports.object({
22009
22020
  type: external_exports.literal("boost"),
@@ -22124,15 +22135,6 @@ var ConsentFlowContractDataValidator = external_exports.object({
22124
22135
  var PaginatedConsentFlowDataValidator = PaginationResponseValidator.extend({
22125
22136
  records: ConsentFlowContractDataValidator.array()
22126
22137
  });
22127
- var ConsentFlowContractDataForDidValidator = external_exports.object({
22128
- credentials: external_exports.object({ category: external_exports.string(), uri: external_exports.string() }).array(),
22129
- personal: external_exports.record(external_exports.string(), external_exports.string()).default({}),
22130
- date: external_exports.string(),
22131
- contractUri: external_exports.string()
22132
- });
22133
- var PaginatedConsentFlowDataForDidValidator = PaginationResponseValidator.extend({
22134
- records: ConsentFlowContractDataForDidValidator.array()
22135
- });
22136
22138
  var ConsentFlowTermValidator = external_exports.object({
22137
22139
  sharing: external_exports.boolean().optional(),
22138
22140
  shared: external_exports.string().array().optional(),
@@ -22166,6 +22168,34 @@ var PaginatedConsentFlowTermsValidator = PaginationResponseValidator.extend({
22166
22168
  status: ConsentFlowTermsStatusValidator
22167
22169
  }).array()
22168
22170
  });
22171
+ var ConsentFlowGuardianApprovalValidator = external_exports.object({
22172
+ guardianProfileId: external_exports.string(),
22173
+ guardianDid: external_exports.string(),
22174
+ approvedAt: external_exports.string().datetime(),
22175
+ contractUpdatedAt: external_exports.string()
22176
+ });
22177
+ var ConsentFlowContractDataForDidValidator = external_exports.object({
22178
+ credentials: external_exports.object({ category: external_exports.string(), uri: external_exports.string() }).array(),
22179
+ personal: external_exports.record(external_exports.string(), external_exports.string()).default({}),
22180
+ date: external_exports.string(),
22181
+ createdAt: external_exports.string().optional(),
22182
+ contractUpdatedAt: external_exports.string(),
22183
+ contractExpiresAt: external_exports.string().optional(),
22184
+ reasonForAccessing: external_exports.string().optional(),
22185
+ guardian: external_exports.object({
22186
+ required: external_exports.boolean(),
22187
+ approved: external_exports.boolean(),
22188
+ approval: ConsentFlowGuardianApprovalValidator.optional()
22189
+ }),
22190
+ contractUri: external_exports.string(),
22191
+ termsUri: external_exports.string(),
22192
+ status: ConsentFlowTermsStatusValidator,
22193
+ expiresAt: external_exports.string().optional(),
22194
+ terms: ConsentFlowTermsValidator
22195
+ });
22196
+ var PaginatedConsentFlowDataForDidValidator = PaginationResponseValidator.extend({
22197
+ records: ConsentFlowContractDataForDidValidator.array()
22198
+ });
22169
22199
  var ConsentFlowContractQueryValidator = external_exports.object({
22170
22200
  read: external_exports.object({
22171
22201
  anonymize: external_exports.boolean().optional(),
@@ -22226,6 +22256,7 @@ var ConsentFlowTransactionValidator = external_exports.object({
22226
22256
  expiresAt: external_exports.string().optional(),
22227
22257
  oneTime: external_exports.boolean().optional(),
22228
22258
  terms: ConsentFlowTermsValidator.optional(),
22259
+ guardianApproval: ConsentFlowGuardianApprovalValidator.optional(),
22229
22260
  id: external_exports.string(),
22230
22261
  action: ConsentFlowTransactionActionValidator,
22231
22262
  date: external_exports.string(),
@@ -22298,7 +22329,8 @@ var LCNNotificationTypeEnumValidator = external_exports.enum([
22298
22329
  "APP_NOTIFICATION",
22299
22330
  "CREDENTIAL_REVOKED",
22300
22331
  "CREDENTIAL_SUSPENDED",
22301
- "CREDENTIAL_UNSUSPENDED"
22332
+ "CREDENTIAL_UNSUSPENDED",
22333
+ "CREDENTIAL_REFRESHED"
22302
22334
  ]);
22303
22335
  var LCNNotificationMessageValidator = external_exports.object({
22304
22336
  title: external_exports.string().optional(),
@@ -22430,12 +22462,16 @@ var CreateContactMethodSessionResponseValidator = external_exports.object({
22430
22462
  });
22431
22463
  var InboxCredentialValidator = external_exports.object({
22432
22464
  id: external_exports.string(),
22433
- credential: external_exports.string(),
22465
+ credential: external_exports.string().optional(),
22434
22466
  isSigned: external_exports.boolean(),
22435
22467
  currentStatus: LCNInboxStatusEnumValidator,
22436
22468
  isAccepted: external_exports.boolean().optional(),
22437
22469
  expiresAt: external_exports.string(),
22438
22470
  createdAt: external_exports.string(),
22471
+ finalizedAt: external_exports.string().optional(),
22472
+ expiredAt: external_exports.string().optional(),
22473
+ credentialName: external_exports.string().optional(),
22474
+ achievementType: external_exports.string().optional(),
22439
22475
  issuerDid: external_exports.string(),
22440
22476
  webhookUrl: external_exports.string().optional(),
22441
22477
  boostUri: external_exports.string().optional(),
@@ -22489,7 +22525,9 @@ var IssueInboxCredentialValidator = external_exports.object({
22489
22525
  "The signing authority to use for the credential. If not provided, the users default signing authority will be used if the credential is not signed."
22490
22526
  ),
22491
22527
  webhookUrl: external_exports.string().url().optional().describe("The webhook URL to receive credential issuance events."),
22492
- expiresInDays: external_exports.number().min(1).max(365).optional().describe("The number of days the credential will be valid for."),
22528
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22529
+ "How many days the encrypted inbox payload remains claimable. This does not change the credential validity period."
22530
+ ),
22493
22531
  templateData: external_exports.record(external_exports.string(), external_exports.unknown()).optional().describe(
22494
22532
  "Template data to render into the boost credential template using Mustache syntax. Only used when boostUri is provided."
22495
22533
  ),
@@ -22552,6 +22590,9 @@ var ClaimInboxCredentialValidator = external_exports.object({
22552
22590
  credential: VCValidator.or(VPValidator).or(UnsignedVCValidator).or(CredentialNameRefValidator).describe("The credential to issue, or a { name } reference to resolve a boost template."),
22553
22591
  configuration: external_exports.object({
22554
22592
  publishableKey: external_exports.string(),
22593
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22594
+ "Inbox claim window in days. Defaults to 720; use a shorter window for sensitive records."
22595
+ ),
22555
22596
  signingAuthorityName: external_exports.string().optional(),
22556
22597
  listingId: external_exports.string().optional(),
22557
22598
  listingSlug: external_exports.string().optional()
@@ -23178,6 +23219,191 @@ var inAppMessagesFlagValidator = external_exports.object({
23178
23219
  version: external_exports.number().default(1),
23179
23220
  messages: external_exports.array(inAppMessageValidator).default([])
23180
23221
  }).passthrough();
23222
+ var LearnCardRefreshAuthorizationValidator = external_exports.object({ type: external_exports.literal("LearnCardDIDAuth") }).catchall(external_exports.any());
23223
+ var ManagedCredentialRefreshServiceValidator = external_exports.object({
23224
+ id: external_exports.string().min(1),
23225
+ type: external_exports.literal("LearnCardCredentialRefresh2026"),
23226
+ authorization: LearnCardRefreshAuthorizationValidator.optional()
23227
+ }).catchall(external_exports.any());
23228
+ var StandardCredentialRefreshServiceValidator = external_exports.object({
23229
+ id: external_exports.string().min(1),
23230
+ type: external_exports.literal("1EdTechCredentialRefresh")
23231
+ }).catchall(external_exports.any());
23232
+ var SupportedCredentialRefreshServiceValidator = external_exports.union([
23233
+ ManagedCredentialRefreshServiceValidator,
23234
+ StandardCredentialRefreshServiceValidator
23235
+ ]);
23236
+ var AllocateCredentialRefreshInputValidator = external_exports.object({
23237
+ holder: external_exports.object({
23238
+ profileId: external_exports.string().optional(),
23239
+ did: external_exports.string().min(1)
23240
+ }),
23241
+ credentialId: external_exports.string().min(1)
23242
+ });
23243
+ var AllocateCredentialRefreshResultValidator = external_exports.object({
23244
+ refreshId: external_exports.string().min(1),
23245
+ refreshService: ManagedCredentialRefreshServiceValidator.extend({
23246
+ authorization: LearnCardRefreshAuthorizationValidator
23247
+ })
23248
+ });
23249
+ var CredentialRefreshSigningModeValidator = external_exports.enum(["issuer-signed", "signing-authority"]);
23250
+ var PublishCredentialRefreshBaseFields = {
23251
+ refreshId: external_exports.string().min(1),
23252
+ notifyHolder: external_exports.boolean().optional(),
23253
+ updateSummary: external_exports.string().optional(),
23254
+ idempotencyKey: external_exports.string().optional()
23255
+ };
23256
+ var PublishIssuerSignedRefreshValidator = external_exports.object({
23257
+ ...PublishCredentialRefreshBaseFields,
23258
+ mode: external_exports.literal("issuer-signed"),
23259
+ signedCredential: VCValidator
23260
+ });
23261
+ var PublishSigningAuthorityRefreshValidator = external_exports.object({
23262
+ ...PublishCredentialRefreshBaseFields,
23263
+ mode: external_exports.literal("signing-authority"),
23264
+ credential: UnsignedVCValidator,
23265
+ signingAuthority: external_exports.object({
23266
+ type: external_exports.string().min(1)
23267
+ }).catchall(external_exports.any())
23268
+ });
23269
+ var PublishCredentialRefreshInputValidator = external_exports.object({
23270
+ ...PublishCredentialRefreshBaseFields,
23271
+ mode: CredentialRefreshSigningModeValidator,
23272
+ signedCredential: VCValidator.optional(),
23273
+ credential: UnsignedVCValidator.optional(),
23274
+ signingAuthority: external_exports.object({
23275
+ type: external_exports.string().min(1)
23276
+ }).catchall(external_exports.any()).optional()
23277
+ }).superRefine((input, ctx) => {
23278
+ if (input.mode === "issuer-signed" && !input.signedCredential) {
23279
+ ctx.addIssue({
23280
+ code: "custom",
23281
+ path: ["signedCredential"],
23282
+ message: "signedCredential is required for issuer-signed publication"
23283
+ });
23284
+ }
23285
+ if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
23286
+ ctx.addIssue({
23287
+ code: "custom",
23288
+ path: ["mode"],
23289
+ message: "issuer-signed publication cannot include signing-authority fields"
23290
+ });
23291
+ }
23292
+ if (input.mode === "signing-authority") {
23293
+ if (input.signedCredential !== void 0) {
23294
+ ctx.addIssue({
23295
+ code: "custom",
23296
+ path: ["signedCredential"],
23297
+ message: "signing-authority publication cannot include signedCredential"
23298
+ });
23299
+ }
23300
+ if (!input.credential) {
23301
+ ctx.addIssue({
23302
+ code: "custom",
23303
+ path: ["credential"],
23304
+ message: "credential is required for signing-authority publication"
23305
+ });
23306
+ }
23307
+ if (!input.signingAuthority) {
23308
+ ctx.addIssue({
23309
+ code: "custom",
23310
+ path: ["signingAuthority"],
23311
+ message: "signingAuthority is required for signing-authority publication"
23312
+ });
23313
+ }
23314
+ }
23315
+ });
23316
+ var PublishCredentialRefreshNotificationValidator = external_exports.enum([
23317
+ "queued",
23318
+ "suppressed",
23319
+ "not-applicable",
23320
+ /** Publication succeeded, but the post-commit notification enqueue must be retried. */
23321
+ "delivery-failed"
23322
+ ]);
23323
+ var PublishCredentialRefreshResultValidator = external_exports.object({
23324
+ refreshId: external_exports.string().min(1),
23325
+ version: external_exports.number().int().positive(),
23326
+ publishedAt: external_exports.string().min(1),
23327
+ notification: PublishCredentialRefreshNotificationValidator
23328
+ });
23329
+ var CredentialRefreshVersionMetadataValidator = external_exports.object({
23330
+ version: external_exports.number().int().positive(),
23331
+ publishedAt: external_exports.string().min(1),
23332
+ effectiveAt: external_exports.string().optional(),
23333
+ etag: external_exports.string().optional(),
23334
+ signingMode: CredentialRefreshSigningModeValidator.optional(),
23335
+ updateSummary: external_exports.string().optional()
23336
+ });
23337
+ var GetCredentialRefreshHistoryInputValidator = external_exports.object({
23338
+ refreshId: external_exports.string().min(1),
23339
+ cursor: external_exports.string().optional(),
23340
+ limit: external_exports.number().int().positive().optional()
23341
+ });
23342
+ var GetCredentialRefreshHistoryResultValidator = external_exports.object({
23343
+ records: CredentialRefreshVersionMetadataValidator.array(),
23344
+ hasMore: external_exports.boolean(),
23345
+ cursor: external_exports.string().optional()
23346
+ });
23347
+ var CredentialRefreshChallengeValidator = external_exports.object({
23348
+ challenge: external_exports.string().min(1),
23349
+ expiresAt: external_exports.string().min(1),
23350
+ domain: external_exports.string().optional(),
23351
+ scheme: external_exports.literal("LearnCardDIDAuth").optional()
23352
+ });
23353
+ var PublicCredentialRefreshEnvelopeValidator = external_exports.object({
23354
+ format: external_exports.literal("vc"),
23355
+ credential: VCValidator,
23356
+ etag: external_exports.string().optional()
23357
+ });
23358
+ var JweCredentialRefreshEnvelopeValidator = external_exports.object({
23359
+ format: external_exports.literal("jwe"),
23360
+ jwe: JWEValidator,
23361
+ etag: external_exports.string().optional(),
23362
+ /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
23363
+ version: external_exports.number().int().positive().optional()
23364
+ });
23365
+ var CredentialRefreshResponseEnvelopeValidator = external_exports.discriminatedUnion("format", [
23366
+ PublicCredentialRefreshEnvelopeValidator,
23367
+ JweCredentialRefreshEnvelopeValidator
23368
+ ]);
23369
+ var CredentialRefreshFailureCodeValidator = external_exports.enum([
23370
+ "UNAVAILABLE",
23371
+ "TIMEOUT",
23372
+ "UNSUPPORTED_SERVICE",
23373
+ "UNAUTHORIZED",
23374
+ "MALFORMED_RESPONSE",
23375
+ "INVALID_PROOF",
23376
+ "ISSUER_MISMATCH",
23377
+ "ID_MISMATCH",
23378
+ "ROLLBACK",
23379
+ "REVOKED",
23380
+ "UNSAFE_ENDPOINT"
23381
+ ]);
23382
+ var CredentialRefreshUpdatedResultValidator = external_exports.object({
23383
+ status: external_exports.literal("updated"),
23384
+ credential: VCValidator,
23385
+ etag: external_exports.string().optional(),
23386
+ managedVersion: external_exports.number().int().positive().optional()
23387
+ });
23388
+ var CredentialRefreshUnchangedResultValidator = external_exports.object({
23389
+ status: external_exports.literal("unchanged"),
23390
+ checkedAt: external_exports.string().min(1),
23391
+ etag: external_exports.string().optional()
23392
+ });
23393
+ var CredentialRefreshUnsupportedResultValidator = external_exports.object({
23394
+ status: external_exports.literal("unsupported")
23395
+ });
23396
+ var CredentialRefreshFailedResultValidator = external_exports.object({
23397
+ status: external_exports.literal("failed"),
23398
+ code: CredentialRefreshFailureCodeValidator,
23399
+ retryable: external_exports.boolean()
23400
+ });
23401
+ var CredentialRefreshResultValidator = external_exports.discriminatedUnion("status", [
23402
+ CredentialRefreshUpdatedResultValidator,
23403
+ CredentialRefreshUnchangedResultValidator,
23404
+ CredentialRefreshUnsupportedResultValidator,
23405
+ CredentialRefreshFailedResultValidator
23406
+ ]);
23181
23407
 
23182
23408
  // src/helpers.ts
23183
23409
  var import_json_stringify_deterministic = __toESM(require_lib(), 1);
@@ -23306,30 +23532,63 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23306
23532
  learnCard.debug?.("Adding LearnCloud Plugin");
23307
23533
  let client = await getLearnCloudClient(url2, learnCard);
23308
23534
  let dids = [learnCard.id.did()];
23309
- void client.user.getDids.query().then((result) => dids = result).catch((error51) => learnCard.debug?.("Unable to preload LearnCloud DIDs", error51));
23310
- let otherClients = {};
23311
- let learnCloudDid;
23312
- const getLearnCloudDid = /* @__PURE__ */ __name(() => learnCloudDid ?? (learnCloudDid = client.utilities.getDid.query()), "getLearnCloudDid");
23313
- const getOtherClient = /* @__PURE__ */ __name(async (url3) => {
23314
- if (!otherClients[url3]) otherClients[url3] = await getLearnCloudClient(url3, learnCard);
23315
- return otherClients[url3];
23535
+ let didsLoaded = false;
23536
+ const loadDids = /* @__PURE__ */ __name(async (currentClient) => {
23537
+ if (didsLoaded) return;
23538
+ dids = await currentClient.user.getDids.query();
23539
+ didsLoaded = true;
23540
+ }, "loadDids");
23541
+ const otherClients = /* @__PURE__ */ new Map();
23542
+ const learnCloudDids = /* @__PURE__ */ new WeakMap();
23543
+ const getLearnCloudDid = /* @__PURE__ */ __name((currentClient) => {
23544
+ let learnCloudDid = learnCloudDids.get(currentClient);
23545
+ if (!learnCloudDid) {
23546
+ learnCloudDid = currentClient.utilities.getDid.query();
23547
+ learnCloudDids.set(currentClient, learnCloudDid);
23548
+ }
23549
+ return learnCloudDid;
23550
+ }, "getLearnCloudDid");
23551
+ const getOtherClient = /* @__PURE__ */ __name(async (otherUrl, _learnCard) => {
23552
+ const key = `${_learnCard.id.did()}\0${otherUrl}`;
23553
+ let otherClient = otherClients.get(key);
23554
+ if (!otherClient) {
23555
+ otherClient = getLearnCloudClient(otherUrl, _learnCard);
23556
+ otherClients.set(key, otherClient);
23557
+ }
23558
+ try {
23559
+ return await otherClient;
23560
+ } catch (error51) {
23561
+ if (otherClients.get(key) === otherClient) otherClients.delete(key);
23562
+ throw error51;
23563
+ }
23316
23564
  }, "getOtherClient");
23317
- const updateLearnCard = /* @__PURE__ */ __name(async (_learnCard) => {
23318
- const oldDid = learnCard.id.did();
23319
- const newDid = _learnCard.id.did();
23320
- if (oldDid !== newDid) {
23321
- if (!dids.includes(newDid) && automaticallyAssociateDids) {
23322
- const presentation = await _learnCard.invoke.getDidAuthVp();
23323
- await client.user.addDid.mutate({ presentation });
23324
- if (newDid.split(":")[1] === "web") {
23325
- await client.user.setPrimaryDid.mutate({ presentation });
23326
- }
23327
- dids = await client.user.getDids.query();
23328
- }
23329
- client = await getLearnCloudClient(url2, _learnCard);
23330
- learnCloudDid = void 0;
23331
- }
23332
- learnCard = _learnCard;
23565
+ let updateQueue = Promise.resolve();
23566
+ const updateLearnCard = /* @__PURE__ */ __name((_learnCard) => {
23567
+ const update = updateQueue.then(async () => {
23568
+ const oldDid = learnCard.id.did();
23569
+ const newDid = _learnCard.id.did();
23570
+ if (oldDid !== newDid) {
23571
+ if (automaticallyAssociateDids) {
23572
+ await loadDids(client);
23573
+ if (!dids.includes(newDid)) {
23574
+ const presentation = await _learnCard.invoke.getDidAuthVp();
23575
+ await client.user.addDid.mutate({ presentation });
23576
+ if (newDid.split(":")[1] === "web") {
23577
+ await client.user.setPrimaryDid.mutate({ presentation });
23578
+ }
23579
+ dids = await client.user.getDids.query();
23580
+ }
23581
+ }
23582
+ client = await getLearnCloudClient(url2, _learnCard);
23583
+ }
23584
+ learnCard = _learnCard;
23585
+ return client;
23586
+ });
23587
+ updateQueue = update.then(
23588
+ () => void 0,
23589
+ () => void 0
23590
+ );
23591
+ return update;
23333
23592
  }, "updateLearnCard");
23334
23593
  return {
23335
23594
  name: "LearnCloud",
@@ -23337,25 +23596,33 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23337
23596
  description: "LearnCloud Integration",
23338
23597
  methods: {
23339
23598
  learnCloudCreate: /* @__PURE__ */ __name(async (_learnCard, document) => {
23340
- await updateLearnCard(_learnCard);
23599
+ const currentClient = await updateLearnCard(_learnCard);
23341
23600
  const item = await generateEncryptedRecord(
23342
23601
  _learnCard,
23343
23602
  document,
23344
23603
  unencryptedCustomFields
23345
23604
  );
23346
- return client.customStorage.create.mutate({
23347
- item: await generateJWE(_learnCard, await getLearnCloudDid(), item)
23605
+ return currentClient.customStorage.create.mutate({
23606
+ item: await generateJWE(
23607
+ _learnCard,
23608
+ await getLearnCloudDid(currentClient),
23609
+ item
23610
+ )
23348
23611
  });
23349
23612
  }, "learnCloudCreate"),
23350
23613
  learnCloudCreateMany: /* @__PURE__ */ __name(async (_learnCard, documents) => {
23351
- await updateLearnCard(_learnCard);
23614
+ const currentClient = await updateLearnCard(_learnCard);
23352
23615
  const items = await Promise.all(
23353
23616
  documents.map(
23354
23617
  async (document) => generateEncryptedRecord(_learnCard, document, unencryptedCustomFields)
23355
23618
  )
23356
23619
  );
23357
- return client.customStorage.createMany.mutate({
23358
- items: await generateJWE(_learnCard, await getLearnCloudDid(), items)
23620
+ return currentClient.customStorage.createMany.mutate({
23621
+ items: await generateJWE(
23622
+ _learnCard,
23623
+ await getLearnCloudDid(currentClient),
23624
+ items
23625
+ )
23359
23626
  });
23360
23627
  }, "learnCloudCreateMany"),
23361
23628
  learnCloudRead: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
@@ -23378,9 +23645,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23378
23645
  return documents;
23379
23646
  }, "learnCloudRead"),
23380
23647
  learnCloudReadPage: /* @__PURE__ */ __name(async (_learnCard, query, paginationOptions, includeAssociatedDids) => {
23381
- await updateLearnCard(_learnCard);
23648
+ const currentClient = await updateLearnCard(_learnCard);
23382
23649
  if (!query) {
23383
- const jwe2 = await client.customStorage.read.query({
23650
+ const jwe2 = await currentClient.customStorage.read.query({
23384
23651
  includeAssociatedDids,
23385
23652
  ...paginationOptions
23386
23653
  });
@@ -23407,8 +23674,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23407
23674
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23408
23675
  )
23409
23676
  );
23410
- const jwe = await client.customStorage.read.query({
23411
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23677
+ const jwe = await currentClient.customStorage.read.query({
23678
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23412
23679
  ...unencryptedEntries,
23413
23680
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23414
23681
  }),
@@ -23430,8 +23697,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23430
23697
  };
23431
23698
  }, "learnCloudReadPage"),
23432
23699
  learnCloudCount: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
23433
- await updateLearnCard(_learnCard);
23434
- if (!query) return client.customStorage.count.query({ includeAssociatedDids });
23700
+ const currentClient = await updateLearnCard(_learnCard);
23701
+ if (!query)
23702
+ return currentClient.customStorage.count.query({ includeAssociatedDids });
23435
23703
  const fields = await generateEncryptedFieldsArray(_learnCard, query, [
23436
23704
  ...unencryptedCustomFields,
23437
23705
  "_id"
@@ -23441,8 +23709,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23441
23709
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23442
23710
  )
23443
23711
  );
23444
- return client.customStorage.count.query({
23445
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23712
+ return currentClient.customStorage.count.query({
23713
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23446
23714
  ...unencryptedEntries,
23447
23715
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23448
23716
  }),
@@ -23450,17 +23718,21 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23450
23718
  });
23451
23719
  }, "learnCloudCount"),
23452
23720
  learnCloudUpdate: /* @__PURE__ */ __name(async (_learnCard, query, update) => {
23453
- await updateLearnCard(_learnCard);
23721
+ const currentClient = await updateLearnCard(_learnCard);
23454
23722
  const documents = await _learnCard.invoke.learnCloudRead(query);
23455
23723
  const updates = await Promise.all(
23456
23724
  documents.map(
23457
- async (document) => client.customStorage.update.mutate({
23458
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23459
- _id: document._id
23460
- }),
23725
+ async (document) => currentClient.customStorage.update.mutate({
23726
+ query: await generateJWE(
23727
+ _learnCard,
23728
+ await getLearnCloudDid(currentClient),
23729
+ {
23730
+ _id: document._id
23731
+ }
23732
+ ),
23461
23733
  update: await generateJWE(
23462
23734
  _learnCard,
23463
- await getLearnCloudDid(),
23735
+ await getLearnCloudDid(currentClient),
23464
23736
  await generateEncryptedRecord(
23465
23737
  _learnCard,
23466
23738
  { ...document, ...update },
@@ -23473,8 +23745,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23473
23745
  return updates.reduce((sum, current) => current + sum, 0);
23474
23746
  }, "learnCloudUpdate"),
23475
23747
  learnCloudDelete: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
23476
- await updateLearnCard(_learnCard);
23477
- if (!query) return client.customStorage.delete.mutate({ includeAssociatedDids });
23748
+ const currentClient = await updateLearnCard(_learnCard);
23749
+ if (!query)
23750
+ return currentClient.customStorage.delete.mutate({ includeAssociatedDids });
23478
23751
  const fields = await generateEncryptedFieldsArray(_learnCard, query, [
23479
23752
  ...unencryptedCustomFields,
23480
23753
  "_id"
@@ -23484,8 +23757,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23484
23757
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23485
23758
  )
23486
23759
  );
23487
- return client.customStorage.delete.mutate({
23488
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23760
+ return currentClient.customStorage.delete.mutate({
23761
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23489
23762
  ...unencryptedEntries,
23490
23763
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23491
23764
  }),
@@ -23493,7 +23766,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23493
23766
  });
23494
23767
  }, "learnCloudDelete"),
23495
23768
  learnCloudBatchResolve: /* @__PURE__ */ __name(async (_learnCard, uris) => {
23496
- const results = await client.storage.batchResolve.query({ uris });
23769
+ const currentClient = await updateLearnCard(_learnCard);
23770
+ const results = await currentClient.storage.batchResolve.query({ uris });
23497
23771
  return Promise.all(
23498
23772
  results.map(async (result) => {
23499
23773
  if (!result) return null;
@@ -23512,19 +23786,20 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23512
23786
  },
23513
23787
  read: {
23514
23788
  get: /* @__PURE__ */ __name(async (_learnCard, uri) => {
23515
- learnCard.debug?.("LearnCloud read.get", uri);
23789
+ _learnCard.debug?.("LearnCloud read.get", uri);
23516
23790
  if (!uri) return void 0;
23791
+ const currentClient = await updateLearnCard(_learnCard);
23517
23792
  const parts = uri.split(":");
23518
- learnCard.debug?.("LearnCloud read.get parts:", parts);
23793
+ _learnCard.debug?.("LearnCloud read.get parts:", parts);
23519
23794
  if (parts.length !== 5) return void 0;
23520
23795
  const [lc, method, uriUrl] = parts;
23521
23796
  if (lc !== "lc" || method !== "cloud") {
23522
- learnCard.debug?.("LearnCloud read.get not cloud URI!", { lc, method });
23797
+ _learnCard.debug?.("LearnCloud read.get not cloud URI!", { lc, method });
23523
23798
  return void 0;
23524
23799
  }
23525
23800
  if (uriUrl.replace(/https?:\/\//g, "") !== url2.replace(/https?:\/\//g, "").replace(/:/g, "%3A")) {
23526
23801
  const fullUrl = (uriUrl.startsWith("http") ? uriUrl : `http${uriUrl.includes("http") || uriUrl.includes("localhost") ? "" : "s"}://${uriUrl}`).replaceAll("%3A", ":");
23527
- learnCard.debug?.("LearnCloud read.get different LearnCloud!", {
23802
+ _learnCard.debug?.("LearnCloud read.get different LearnCloud!", {
23528
23803
  uriUrl,
23529
23804
  url: url2,
23530
23805
  fullUrl,
@@ -23533,12 +23808,12 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23533
23808
  b: url2.replace(/https?:\/\//g, "").replace(/:/g, "%3A")
23534
23809
  }
23535
23810
  });
23536
- const otherClient = await getOtherClient(fullUrl);
23811
+ const otherClient = await getOtherClient(fullUrl, _learnCard);
23537
23812
  try {
23538
23813
  const result = await otherClient.storage.resolve.query({ uri });
23539
- learnCard.debug?.("LearnCloud read.get result", result);
23814
+ _learnCard.debug?.("LearnCloud read.get result", result);
23540
23815
  const decryptedResult = await _learnCard.invoke.decryptDagJwe(result);
23541
- learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23816
+ _learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23542
23817
  const parsed = await VCValidator.or(VPValidator).or(StoredCredentialEnvelopeValidator).parseAsync(decryptedResult);
23543
23818
  return (0, import_helpers.resolveStorageReadResult)(parsed);
23544
23819
  } catch (error51) {
@@ -23547,10 +23822,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23547
23822
  }
23548
23823
  }
23549
23824
  try {
23550
- const result = await client.storage.resolve.query({ uri });
23551
- learnCard.debug?.("LearnCloud read.get result", result);
23825
+ const result = await currentClient.storage.resolve.query({ uri });
23826
+ _learnCard.debug?.("LearnCloud read.get result", result);
23552
23827
  const decryptedResult = await _learnCard.invoke.decryptDagJwe(result);
23553
- learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23828
+ _learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23554
23829
  const parsed = await VCValidator.or(VPValidator).or(StoredCredentialEnvelopeValidator).parseAsync(decryptedResult);
23555
23830
  return (0, import_helpers.resolveStorageReadResult)(parsed);
23556
23831
  } catch (error51) {
@@ -23562,23 +23837,26 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23562
23837
  store: {
23563
23838
  upload: /* @__PURE__ */ __name(async (_learnCard, credential) => {
23564
23839
  _learnCard.debug?.("learnCard.store['LearnCard Network'].upload");
23565
- return client.storage.store.mutate({
23840
+ const currentClient = await updateLearnCard(_learnCard);
23841
+ return currentClient.storage.store.mutate({
23566
23842
  item: normalizeEnvelopeForTransport(credential)
23567
23843
  });
23568
23844
  }, "upload"),
23569
23845
  uploadEncrypted: /* @__PURE__ */ __name(async (_learnCard, credential, { recipients = [] } = { recipients: [] }) => {
23570
23846
  _learnCard.debug?.("learnCard.store['LearnCard Network'].upload");
23847
+ const currentClient = await updateLearnCard(_learnCard);
23571
23848
  const jwe = await _learnCard.invoke.createDagJwe(
23572
23849
  normalizeEnvelopeForTransport(credential),
23573
23850
  [_learnCard.id.did(), ...recipients]
23574
23851
  );
23575
- return client.storage.store.mutate({ item: jwe });
23852
+ return currentClient.storage.store.mutate({ item: jwe });
23576
23853
  }, "uploadEncrypted"),
23577
23854
  delete: /* @__PURE__ */ __name(async (_learnCard, uri) => {
23578
23855
  _learnCard.debug?.("learnCard.store['LearnCloud'].delete", { uri });
23856
+ const currentClient = await updateLearnCard(_learnCard);
23579
23857
  let deleted = false;
23580
23858
  try {
23581
- deleted = Boolean(await client.storage.delete.mutate({ uri }));
23859
+ deleted = Boolean(await currentClient.storage.delete.mutate({ uri }));
23582
23860
  } catch (error51) {
23583
23861
  _learnCard.debug?.("LearnCloud store.delete storage.delete failed", error51);
23584
23862
  }
@@ -23611,7 +23889,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23611
23889
  return records;
23612
23890
  }, "get"),
23613
23891
  getPage: /* @__PURE__ */ __name(async (_learnCard, query, paginationOptions) => {
23614
- await updateLearnCard(_learnCard);
23892
+ const currentClient = await updateLearnCard(_learnCard);
23615
23893
  _learnCard.debug?.("LearnCloud index.getPaginated", query, paginationOptions);
23616
23894
  const options = {
23617
23895
  ...paginationOptions,
@@ -23619,7 +23897,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23619
23897
  };
23620
23898
  if (!query) {
23621
23899
  _learnCard.debug?.("LearnCloud index.get (no query)");
23622
- const jwe2 = await client.index.get.query(options);
23900
+ const jwe2 = await currentClient.index.get.query(options);
23623
23901
  _learnCard.debug?.("LearnCloud index.get (no query response)", jwe2);
23624
23902
  const encryptedRecords2 = (0, import_helpers.isEncrypted)(jwe2) ? await decryptJWE(_learnCard, jwe2) : jwe2;
23625
23903
  _learnCard.debug?.(
@@ -23649,8 +23927,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23649
23927
  "LearnCloud index.get (query unencryptedEntries)",
23650
23928
  unencryptedEntries
23651
23929
  );
23652
- const jwe = await client.index.get.query({
23653
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23930
+ const jwe = await currentClient.index.get.query({
23931
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23654
23932
  ...unencryptedEntries,
23655
23933
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23656
23934
  }),
@@ -23672,10 +23950,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23672
23950
  };
23673
23951
  }, "getPage"),
23674
23952
  getCount: /* @__PURE__ */ __name(async (_learnCard, query) => {
23675
- await updateLearnCard(_learnCard);
23953
+ const currentClient = await updateLearnCard(_learnCard);
23676
23954
  if (!query) {
23677
23955
  _learnCard.debug?.("LearnCloud index.count (no query)");
23678
- const jwe2 = await client.index.count.query();
23956
+ const jwe2 = await currentClient.index.count.query();
23679
23957
  _learnCard.debug?.("LearnCloud index.count (no query response)", jwe2);
23680
23958
  const count2 = (0, import_helpers.isEncrypted)(jwe2) ? await decryptJWE(_learnCard, jwe2) : jwe2;
23681
23959
  _learnCard.debug?.("LearnCloud index.count (no query count)", count2);
@@ -23695,8 +23973,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23695
23973
  "LearnCloud index.getCount (query unencryptedEntries)",
23696
23974
  unencryptedEntries
23697
23975
  );
23698
- const jwe = await client.index.count.query({
23699
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23976
+ const jwe = await currentClient.index.count.query({
23977
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23700
23978
  ...unencryptedEntries,
23701
23979
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23702
23980
  })
@@ -23707,10 +23985,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23707
23985
  return count;
23708
23986
  }, "getCount"),
23709
23987
  add: /* @__PURE__ */ __name(async (_learnCard, record2) => {
23710
- await updateLearnCard(_learnCard);
23988
+ const currentClient = await updateLearnCard(_learnCard);
23711
23989
  const id = record2.id || _learnCard.invoke.crypto().randomUUID();
23712
- return client.index.add.mutate({
23713
- record: await generateJWE(_learnCard, await getLearnCloudDid(), {
23990
+ return currentClient.index.add.mutate({
23991
+ record: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23714
23992
  ...await generateEncryptedRecord(
23715
23993
  _learnCard,
23716
23994
  { ...record2, id },
@@ -23721,7 +23999,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23721
23999
  });
23722
24000
  }, "add"),
23723
24001
  addMany: /* @__PURE__ */ __name(async (_learnCard, _records) => {
23724
- await updateLearnCard(_learnCard);
24002
+ const currentClient = await updateLearnCard(_learnCard);
23725
24003
  const results = await Promise.all(
23726
24004
  (0, import_lodash.chunk)(_records, 25).map(async (batch) => {
23727
24005
  const records = await Promise.all(
@@ -23737,10 +24015,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23737
24015
  };
23738
24016
  })
23739
24017
  );
23740
- return client.index.addMany.mutate({
24018
+ return currentClient.index.addMany.mutate({
23741
24019
  records: await generateJWE(
23742
24020
  _learnCard,
23743
- await getLearnCloudDid(),
24021
+ await getLearnCloudDid(currentClient),
23744
24022
  records
23745
24023
  )
23746
24024
  });
@@ -23749,27 +24027,27 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23749
24027
  return results.every(Boolean);
23750
24028
  }, "addMany"),
23751
24029
  update: /* @__PURE__ */ __name(async (_learnCard, id, updates) => {
23752
- await updateLearnCard(_learnCard);
24030
+ const currentClient = await updateLearnCard(_learnCard);
23753
24031
  const records = await _learnCard.index.LearnCloud.get({ id });
23754
24032
  if (records.length !== 1) return false;
23755
24033
  const record2 = records[0];
23756
24034
  const newRecord = { ...record2, ...updates };
23757
- return client.index.update.mutate({
24035
+ return currentClient.index.update.mutate({
23758
24036
  id: await hash2(_learnCard, id),
23759
24037
  updates: await generateJWE(
23760
24038
  _learnCard,
23761
- await getLearnCloudDid(),
24039
+ await getLearnCloudDid(currentClient),
23762
24040
  await generateEncryptedRecord(_learnCard, newRecord, unencryptedFields)
23763
24041
  )
23764
24042
  });
23765
24043
  }, "update"),
23766
24044
  remove: /* @__PURE__ */ __name(async (_learnCard, id) => {
23767
- await updateLearnCard(_learnCard);
23768
- return client.index.remove.mutate({ id: await hash2(_learnCard, id) });
24045
+ const currentClient = await updateLearnCard(_learnCard);
24046
+ return currentClient.index.remove.mutate({ id: await hash2(_learnCard, id) });
23769
24047
  }, "remove"),
23770
24048
  removeAll: /* @__PURE__ */ __name(async (_learnCard) => {
23771
- await updateLearnCard(_learnCard);
23772
- return client.index.removeAll.mutate();
24049
+ const currentClient = await updateLearnCard(_learnCard);
24050
+ return currentClient.index.removeAll.mutate();
23773
24051
  }, "removeAll")
23774
24052
  }
23775
24053
  };