@learncard/learn-cloud-plugin 2.3.39 → 2.3.40

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.
@@ -22003,7 +22003,10 @@ var SendOptionsValidator = external_exports.object({
22003
22003
  webhookUrl: external_exports.string().url().optional().describe("Webhook URL to receive claim notifications"),
22004
22004
  suppressDelivery: external_exports.boolean().optional().describe("If true, returns claimUrl without sending email/SMS"),
22005
22005
  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")
22006
+ guardianEmail: external_exports.string().email().optional().describe("Guardian email that must approve before student can claim"),
22007
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22008
+ "How many days the credential stays claimable in the Universal Inbox (default 30). Does not change the credential validity period."
22009
+ )
22007
22010
  });
22008
22011
  var SendBoostInputValidator = external_exports.object({
22009
22012
  type: external_exports.literal("boost"),
@@ -22298,7 +22301,8 @@ var LCNNotificationTypeEnumValidator = external_exports.enum([
22298
22301
  "APP_NOTIFICATION",
22299
22302
  "CREDENTIAL_REVOKED",
22300
22303
  "CREDENTIAL_SUSPENDED",
22301
- "CREDENTIAL_UNSUSPENDED"
22304
+ "CREDENTIAL_UNSUSPENDED",
22305
+ "CREDENTIAL_REFRESHED"
22302
22306
  ]);
22303
22307
  var LCNNotificationMessageValidator = external_exports.object({
22304
22308
  title: external_exports.string().optional(),
@@ -22430,12 +22434,16 @@ var CreateContactMethodSessionResponseValidator = external_exports.object({
22430
22434
  });
22431
22435
  var InboxCredentialValidator = external_exports.object({
22432
22436
  id: external_exports.string(),
22433
- credential: external_exports.string(),
22437
+ credential: external_exports.string().optional(),
22434
22438
  isSigned: external_exports.boolean(),
22435
22439
  currentStatus: LCNInboxStatusEnumValidator,
22436
22440
  isAccepted: external_exports.boolean().optional(),
22437
22441
  expiresAt: external_exports.string(),
22438
22442
  createdAt: external_exports.string(),
22443
+ finalizedAt: external_exports.string().optional(),
22444
+ expiredAt: external_exports.string().optional(),
22445
+ credentialName: external_exports.string().optional(),
22446
+ achievementType: external_exports.string().optional(),
22439
22447
  issuerDid: external_exports.string(),
22440
22448
  webhookUrl: external_exports.string().optional(),
22441
22449
  boostUri: external_exports.string().optional(),
@@ -22489,7 +22497,9 @@ var IssueInboxCredentialValidator = external_exports.object({
22489
22497
  "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
22498
  ),
22491
22499
  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."),
22500
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22501
+ "How many days the encrypted inbox payload remains claimable. This does not change the credential validity period."
22502
+ ),
22493
22503
  templateData: external_exports.record(external_exports.string(), external_exports.unknown()).optional().describe(
22494
22504
  "Template data to render into the boost credential template using Mustache syntax. Only used when boostUri is provided."
22495
22505
  ),
@@ -22552,6 +22562,9 @@ var ClaimInboxCredentialValidator = external_exports.object({
22552
22562
  credential: VCValidator.or(VPValidator).or(UnsignedVCValidator).or(CredentialNameRefValidator).describe("The credential to issue, or a { name } reference to resolve a boost template."),
22553
22563
  configuration: external_exports.object({
22554
22564
  publishableKey: external_exports.string(),
22565
+ expiresInDays: external_exports.number().int().min(1).max(720).optional().describe(
22566
+ "Inbox claim window in days. Defaults to 720; use a shorter window for sensitive records."
22567
+ ),
22555
22568
  signingAuthorityName: external_exports.string().optional(),
22556
22569
  listingId: external_exports.string().optional(),
22557
22570
  listingSlug: external_exports.string().optional()
@@ -23178,6 +23191,191 @@ var inAppMessagesFlagValidator = external_exports.object({
23178
23191
  version: external_exports.number().default(1),
23179
23192
  messages: external_exports.array(inAppMessageValidator).default([])
23180
23193
  }).passthrough();
23194
+ var LearnCardRefreshAuthorizationValidator = external_exports.object({ type: external_exports.literal("LearnCardDIDAuth") }).catchall(external_exports.any());
23195
+ var ManagedCredentialRefreshServiceValidator = external_exports.object({
23196
+ id: external_exports.string().min(1),
23197
+ type: external_exports.literal("LearnCardCredentialRefresh2026"),
23198
+ authorization: LearnCardRefreshAuthorizationValidator.optional()
23199
+ }).catchall(external_exports.any());
23200
+ var StandardCredentialRefreshServiceValidator = external_exports.object({
23201
+ id: external_exports.string().min(1),
23202
+ type: external_exports.literal("1EdTechCredentialRefresh")
23203
+ }).catchall(external_exports.any());
23204
+ var SupportedCredentialRefreshServiceValidator = external_exports.union([
23205
+ ManagedCredentialRefreshServiceValidator,
23206
+ StandardCredentialRefreshServiceValidator
23207
+ ]);
23208
+ var AllocateCredentialRefreshInputValidator = external_exports.object({
23209
+ holder: external_exports.object({
23210
+ profileId: external_exports.string().optional(),
23211
+ did: external_exports.string().min(1)
23212
+ }),
23213
+ credentialId: external_exports.string().min(1)
23214
+ });
23215
+ var AllocateCredentialRefreshResultValidator = external_exports.object({
23216
+ refreshId: external_exports.string().min(1),
23217
+ refreshService: ManagedCredentialRefreshServiceValidator.extend({
23218
+ authorization: LearnCardRefreshAuthorizationValidator
23219
+ })
23220
+ });
23221
+ var CredentialRefreshSigningModeValidator = external_exports.enum(["issuer-signed", "signing-authority"]);
23222
+ var PublishCredentialRefreshBaseFields = {
23223
+ refreshId: external_exports.string().min(1),
23224
+ notifyHolder: external_exports.boolean().optional(),
23225
+ updateSummary: external_exports.string().optional(),
23226
+ idempotencyKey: external_exports.string().optional()
23227
+ };
23228
+ var PublishIssuerSignedRefreshValidator = external_exports.object({
23229
+ ...PublishCredentialRefreshBaseFields,
23230
+ mode: external_exports.literal("issuer-signed"),
23231
+ signedCredential: VCValidator
23232
+ });
23233
+ var PublishSigningAuthorityRefreshValidator = external_exports.object({
23234
+ ...PublishCredentialRefreshBaseFields,
23235
+ mode: external_exports.literal("signing-authority"),
23236
+ credential: UnsignedVCValidator,
23237
+ signingAuthority: external_exports.object({
23238
+ type: external_exports.string().min(1)
23239
+ }).catchall(external_exports.any())
23240
+ });
23241
+ var PublishCredentialRefreshInputValidator = external_exports.object({
23242
+ ...PublishCredentialRefreshBaseFields,
23243
+ mode: CredentialRefreshSigningModeValidator,
23244
+ signedCredential: VCValidator.optional(),
23245
+ credential: UnsignedVCValidator.optional(),
23246
+ signingAuthority: external_exports.object({
23247
+ type: external_exports.string().min(1)
23248
+ }).catchall(external_exports.any()).optional()
23249
+ }).superRefine((input, ctx) => {
23250
+ if (input.mode === "issuer-signed" && !input.signedCredential) {
23251
+ ctx.addIssue({
23252
+ code: "custom",
23253
+ path: ["signedCredential"],
23254
+ message: "signedCredential is required for issuer-signed publication"
23255
+ });
23256
+ }
23257
+ if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
23258
+ ctx.addIssue({
23259
+ code: "custom",
23260
+ path: ["mode"],
23261
+ message: "issuer-signed publication cannot include signing-authority fields"
23262
+ });
23263
+ }
23264
+ if (input.mode === "signing-authority") {
23265
+ if (input.signedCredential !== void 0) {
23266
+ ctx.addIssue({
23267
+ code: "custom",
23268
+ path: ["signedCredential"],
23269
+ message: "signing-authority publication cannot include signedCredential"
23270
+ });
23271
+ }
23272
+ if (!input.credential) {
23273
+ ctx.addIssue({
23274
+ code: "custom",
23275
+ path: ["credential"],
23276
+ message: "credential is required for signing-authority publication"
23277
+ });
23278
+ }
23279
+ if (!input.signingAuthority) {
23280
+ ctx.addIssue({
23281
+ code: "custom",
23282
+ path: ["signingAuthority"],
23283
+ message: "signingAuthority is required for signing-authority publication"
23284
+ });
23285
+ }
23286
+ }
23287
+ });
23288
+ var PublishCredentialRefreshNotificationValidator = external_exports.enum([
23289
+ "queued",
23290
+ "suppressed",
23291
+ "not-applicable",
23292
+ /** Publication succeeded, but the post-commit notification enqueue must be retried. */
23293
+ "delivery-failed"
23294
+ ]);
23295
+ var PublishCredentialRefreshResultValidator = external_exports.object({
23296
+ refreshId: external_exports.string().min(1),
23297
+ version: external_exports.number().int().positive(),
23298
+ publishedAt: external_exports.string().min(1),
23299
+ notification: PublishCredentialRefreshNotificationValidator
23300
+ });
23301
+ var CredentialRefreshVersionMetadataValidator = external_exports.object({
23302
+ version: external_exports.number().int().positive(),
23303
+ publishedAt: external_exports.string().min(1),
23304
+ effectiveAt: external_exports.string().optional(),
23305
+ etag: external_exports.string().optional(),
23306
+ signingMode: CredentialRefreshSigningModeValidator.optional(),
23307
+ updateSummary: external_exports.string().optional()
23308
+ });
23309
+ var GetCredentialRefreshHistoryInputValidator = external_exports.object({
23310
+ refreshId: external_exports.string().min(1),
23311
+ cursor: external_exports.string().optional(),
23312
+ limit: external_exports.number().int().positive().optional()
23313
+ });
23314
+ var GetCredentialRefreshHistoryResultValidator = external_exports.object({
23315
+ records: CredentialRefreshVersionMetadataValidator.array(),
23316
+ hasMore: external_exports.boolean(),
23317
+ cursor: external_exports.string().optional()
23318
+ });
23319
+ var CredentialRefreshChallengeValidator = external_exports.object({
23320
+ challenge: external_exports.string().min(1),
23321
+ expiresAt: external_exports.string().min(1),
23322
+ domain: external_exports.string().optional(),
23323
+ scheme: external_exports.literal("LearnCardDIDAuth").optional()
23324
+ });
23325
+ var PublicCredentialRefreshEnvelopeValidator = external_exports.object({
23326
+ format: external_exports.literal("vc"),
23327
+ credential: VCValidator,
23328
+ etag: external_exports.string().optional()
23329
+ });
23330
+ var JweCredentialRefreshEnvelopeValidator = external_exports.object({
23331
+ format: external_exports.literal("jwe"),
23332
+ jwe: JWEValidator,
23333
+ etag: external_exports.string().optional(),
23334
+ /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
23335
+ version: external_exports.number().int().positive().optional()
23336
+ });
23337
+ var CredentialRefreshResponseEnvelopeValidator = external_exports.discriminatedUnion("format", [
23338
+ PublicCredentialRefreshEnvelopeValidator,
23339
+ JweCredentialRefreshEnvelopeValidator
23340
+ ]);
23341
+ var CredentialRefreshFailureCodeValidator = external_exports.enum([
23342
+ "UNAVAILABLE",
23343
+ "TIMEOUT",
23344
+ "UNSUPPORTED_SERVICE",
23345
+ "UNAUTHORIZED",
23346
+ "MALFORMED_RESPONSE",
23347
+ "INVALID_PROOF",
23348
+ "ISSUER_MISMATCH",
23349
+ "ID_MISMATCH",
23350
+ "ROLLBACK",
23351
+ "REVOKED",
23352
+ "UNSAFE_ENDPOINT"
23353
+ ]);
23354
+ var CredentialRefreshUpdatedResultValidator = external_exports.object({
23355
+ status: external_exports.literal("updated"),
23356
+ credential: VCValidator,
23357
+ etag: external_exports.string().optional(),
23358
+ managedVersion: external_exports.number().int().positive().optional()
23359
+ });
23360
+ var CredentialRefreshUnchangedResultValidator = external_exports.object({
23361
+ status: external_exports.literal("unchanged"),
23362
+ checkedAt: external_exports.string().min(1),
23363
+ etag: external_exports.string().optional()
23364
+ });
23365
+ var CredentialRefreshUnsupportedResultValidator = external_exports.object({
23366
+ status: external_exports.literal("unsupported")
23367
+ });
23368
+ var CredentialRefreshFailedResultValidator = external_exports.object({
23369
+ status: external_exports.literal("failed"),
23370
+ code: CredentialRefreshFailureCodeValidator,
23371
+ retryable: external_exports.boolean()
23372
+ });
23373
+ var CredentialRefreshResultValidator = external_exports.discriminatedUnion("status", [
23374
+ CredentialRefreshUpdatedResultValidator,
23375
+ CredentialRefreshUnchangedResultValidator,
23376
+ CredentialRefreshUnsupportedResultValidator,
23377
+ CredentialRefreshFailedResultValidator
23378
+ ]);
23181
23379
 
23182
23380
  // src/helpers.ts
23183
23381
  var import_json_stringify_deterministic = __toESM(require_lib(), 1);
@@ -23306,30 +23504,63 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23306
23504
  learnCard.debug?.("Adding LearnCloud Plugin");
23307
23505
  let client = await getLearnCloudClient(url2, learnCard);
23308
23506
  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];
23507
+ let didsLoaded = false;
23508
+ const loadDids = /* @__PURE__ */ __name(async (currentClient) => {
23509
+ if (didsLoaded) return;
23510
+ dids = await currentClient.user.getDids.query();
23511
+ didsLoaded = true;
23512
+ }, "loadDids");
23513
+ const otherClients = /* @__PURE__ */ new Map();
23514
+ const learnCloudDids = /* @__PURE__ */ new WeakMap();
23515
+ const getLearnCloudDid = /* @__PURE__ */ __name((currentClient) => {
23516
+ let learnCloudDid = learnCloudDids.get(currentClient);
23517
+ if (!learnCloudDid) {
23518
+ learnCloudDid = currentClient.utilities.getDid.query();
23519
+ learnCloudDids.set(currentClient, learnCloudDid);
23520
+ }
23521
+ return learnCloudDid;
23522
+ }, "getLearnCloudDid");
23523
+ const getOtherClient = /* @__PURE__ */ __name(async (otherUrl, _learnCard) => {
23524
+ const key = `${_learnCard.id.did()}\0${otherUrl}`;
23525
+ let otherClient = otherClients.get(key);
23526
+ if (!otherClient) {
23527
+ otherClient = getLearnCloudClient(otherUrl, _learnCard);
23528
+ otherClients.set(key, otherClient);
23529
+ }
23530
+ try {
23531
+ return await otherClient;
23532
+ } catch (error51) {
23533
+ if (otherClients.get(key) === otherClient) otherClients.delete(key);
23534
+ throw error51;
23535
+ }
23316
23536
  }, "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;
23537
+ let updateQueue = Promise.resolve();
23538
+ const updateLearnCard = /* @__PURE__ */ __name((_learnCard) => {
23539
+ const update = updateQueue.then(async () => {
23540
+ const oldDid = learnCard.id.did();
23541
+ const newDid = _learnCard.id.did();
23542
+ if (oldDid !== newDid) {
23543
+ if (automaticallyAssociateDids) {
23544
+ await loadDids(client);
23545
+ if (!dids.includes(newDid)) {
23546
+ const presentation = await _learnCard.invoke.getDidAuthVp();
23547
+ await client.user.addDid.mutate({ presentation });
23548
+ if (newDid.split(":")[1] === "web") {
23549
+ await client.user.setPrimaryDid.mutate({ presentation });
23550
+ }
23551
+ dids = await client.user.getDids.query();
23552
+ }
23553
+ }
23554
+ client = await getLearnCloudClient(url2, _learnCard);
23555
+ }
23556
+ learnCard = _learnCard;
23557
+ return client;
23558
+ });
23559
+ updateQueue = update.then(
23560
+ () => void 0,
23561
+ () => void 0
23562
+ );
23563
+ return update;
23333
23564
  }, "updateLearnCard");
23334
23565
  return {
23335
23566
  name: "LearnCloud",
@@ -23337,25 +23568,33 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23337
23568
  description: "LearnCloud Integration",
23338
23569
  methods: {
23339
23570
  learnCloudCreate: /* @__PURE__ */ __name(async (_learnCard, document) => {
23340
- await updateLearnCard(_learnCard);
23571
+ const currentClient = await updateLearnCard(_learnCard);
23341
23572
  const item = await generateEncryptedRecord(
23342
23573
  _learnCard,
23343
23574
  document,
23344
23575
  unencryptedCustomFields
23345
23576
  );
23346
- return client.customStorage.create.mutate({
23347
- item: await generateJWE(_learnCard, await getLearnCloudDid(), item)
23577
+ return currentClient.customStorage.create.mutate({
23578
+ item: await generateJWE(
23579
+ _learnCard,
23580
+ await getLearnCloudDid(currentClient),
23581
+ item
23582
+ )
23348
23583
  });
23349
23584
  }, "learnCloudCreate"),
23350
23585
  learnCloudCreateMany: /* @__PURE__ */ __name(async (_learnCard, documents) => {
23351
- await updateLearnCard(_learnCard);
23586
+ const currentClient = await updateLearnCard(_learnCard);
23352
23587
  const items = await Promise.all(
23353
23588
  documents.map(
23354
23589
  async (document) => generateEncryptedRecord(_learnCard, document, unencryptedCustomFields)
23355
23590
  )
23356
23591
  );
23357
- return client.customStorage.createMany.mutate({
23358
- items: await generateJWE(_learnCard, await getLearnCloudDid(), items)
23592
+ return currentClient.customStorage.createMany.mutate({
23593
+ items: await generateJWE(
23594
+ _learnCard,
23595
+ await getLearnCloudDid(currentClient),
23596
+ items
23597
+ )
23359
23598
  });
23360
23599
  }, "learnCloudCreateMany"),
23361
23600
  learnCloudRead: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
@@ -23378,9 +23617,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23378
23617
  return documents;
23379
23618
  }, "learnCloudRead"),
23380
23619
  learnCloudReadPage: /* @__PURE__ */ __name(async (_learnCard, query, paginationOptions, includeAssociatedDids) => {
23381
- await updateLearnCard(_learnCard);
23620
+ const currentClient = await updateLearnCard(_learnCard);
23382
23621
  if (!query) {
23383
- const jwe2 = await client.customStorage.read.query({
23622
+ const jwe2 = await currentClient.customStorage.read.query({
23384
23623
  includeAssociatedDids,
23385
23624
  ...paginationOptions
23386
23625
  });
@@ -23407,8 +23646,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23407
23646
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23408
23647
  )
23409
23648
  );
23410
- const jwe = await client.customStorage.read.query({
23411
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23649
+ const jwe = await currentClient.customStorage.read.query({
23650
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23412
23651
  ...unencryptedEntries,
23413
23652
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23414
23653
  }),
@@ -23430,8 +23669,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23430
23669
  };
23431
23670
  }, "learnCloudReadPage"),
23432
23671
  learnCloudCount: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
23433
- await updateLearnCard(_learnCard);
23434
- if (!query) return client.customStorage.count.query({ includeAssociatedDids });
23672
+ const currentClient = await updateLearnCard(_learnCard);
23673
+ if (!query)
23674
+ return currentClient.customStorage.count.query({ includeAssociatedDids });
23435
23675
  const fields = await generateEncryptedFieldsArray(_learnCard, query, [
23436
23676
  ...unencryptedCustomFields,
23437
23677
  "_id"
@@ -23441,8 +23681,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23441
23681
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23442
23682
  )
23443
23683
  );
23444
- return client.customStorage.count.query({
23445
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23684
+ return currentClient.customStorage.count.query({
23685
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23446
23686
  ...unencryptedEntries,
23447
23687
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23448
23688
  }),
@@ -23450,17 +23690,21 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23450
23690
  });
23451
23691
  }, "learnCloudCount"),
23452
23692
  learnCloudUpdate: /* @__PURE__ */ __name(async (_learnCard, query, update) => {
23453
- await updateLearnCard(_learnCard);
23693
+ const currentClient = await updateLearnCard(_learnCard);
23454
23694
  const documents = await _learnCard.invoke.learnCloudRead(query);
23455
23695
  const updates = await Promise.all(
23456
23696
  documents.map(
23457
- async (document) => client.customStorage.update.mutate({
23458
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23459
- _id: document._id
23460
- }),
23697
+ async (document) => currentClient.customStorage.update.mutate({
23698
+ query: await generateJWE(
23699
+ _learnCard,
23700
+ await getLearnCloudDid(currentClient),
23701
+ {
23702
+ _id: document._id
23703
+ }
23704
+ ),
23461
23705
  update: await generateJWE(
23462
23706
  _learnCard,
23463
- await getLearnCloudDid(),
23707
+ await getLearnCloudDid(currentClient),
23464
23708
  await generateEncryptedRecord(
23465
23709
  _learnCard,
23466
23710
  { ...document, ...update },
@@ -23473,8 +23717,9 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23473
23717
  return updates.reduce((sum, current) => current + sum, 0);
23474
23718
  }, "learnCloudUpdate"),
23475
23719
  learnCloudDelete: /* @__PURE__ */ __name(async (_learnCard, query, includeAssociatedDids) => {
23476
- await updateLearnCard(_learnCard);
23477
- if (!query) return client.customStorage.delete.mutate({ includeAssociatedDids });
23720
+ const currentClient = await updateLearnCard(_learnCard);
23721
+ if (!query)
23722
+ return currentClient.customStorage.delete.mutate({ includeAssociatedDids });
23478
23723
  const fields = await generateEncryptedFieldsArray(_learnCard, query, [
23479
23724
  ...unencryptedCustomFields,
23480
23725
  "_id"
@@ -23484,8 +23729,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23484
23729
  ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
23485
23730
  )
23486
23731
  );
23487
- return client.customStorage.delete.mutate({
23488
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23732
+ return currentClient.customStorage.delete.mutate({
23733
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23489
23734
  ...unencryptedEntries,
23490
23735
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23491
23736
  }),
@@ -23493,7 +23738,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23493
23738
  });
23494
23739
  }, "learnCloudDelete"),
23495
23740
  learnCloudBatchResolve: /* @__PURE__ */ __name(async (_learnCard, uris) => {
23496
- const results = await client.storage.batchResolve.query({ uris });
23741
+ const currentClient = await updateLearnCard(_learnCard);
23742
+ const results = await currentClient.storage.batchResolve.query({ uris });
23497
23743
  return Promise.all(
23498
23744
  results.map(async (result) => {
23499
23745
  if (!result) return null;
@@ -23512,19 +23758,20 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23512
23758
  },
23513
23759
  read: {
23514
23760
  get: /* @__PURE__ */ __name(async (_learnCard, uri) => {
23515
- learnCard.debug?.("LearnCloud read.get", uri);
23761
+ _learnCard.debug?.("LearnCloud read.get", uri);
23516
23762
  if (!uri) return void 0;
23763
+ const currentClient = await updateLearnCard(_learnCard);
23517
23764
  const parts = uri.split(":");
23518
- learnCard.debug?.("LearnCloud read.get parts:", parts);
23765
+ _learnCard.debug?.("LearnCloud read.get parts:", parts);
23519
23766
  if (parts.length !== 5) return void 0;
23520
23767
  const [lc, method, uriUrl] = parts;
23521
23768
  if (lc !== "lc" || method !== "cloud") {
23522
- learnCard.debug?.("LearnCloud read.get not cloud URI!", { lc, method });
23769
+ _learnCard.debug?.("LearnCloud read.get not cloud URI!", { lc, method });
23523
23770
  return void 0;
23524
23771
  }
23525
23772
  if (uriUrl.replace(/https?:\/\//g, "") !== url2.replace(/https?:\/\//g, "").replace(/:/g, "%3A")) {
23526
23773
  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!", {
23774
+ _learnCard.debug?.("LearnCloud read.get different LearnCloud!", {
23528
23775
  uriUrl,
23529
23776
  url: url2,
23530
23777
  fullUrl,
@@ -23533,12 +23780,12 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23533
23780
  b: url2.replace(/https?:\/\//g, "").replace(/:/g, "%3A")
23534
23781
  }
23535
23782
  });
23536
- const otherClient = await getOtherClient(fullUrl);
23783
+ const otherClient = await getOtherClient(fullUrl, _learnCard);
23537
23784
  try {
23538
23785
  const result = await otherClient.storage.resolve.query({ uri });
23539
- learnCard.debug?.("LearnCloud read.get result", result);
23786
+ _learnCard.debug?.("LearnCloud read.get result", result);
23540
23787
  const decryptedResult = await _learnCard.invoke.decryptDagJwe(result);
23541
- learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23788
+ _learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23542
23789
  const parsed = await VCValidator.or(VPValidator).or(StoredCredentialEnvelopeValidator).parseAsync(decryptedResult);
23543
23790
  return (0, import_helpers.resolveStorageReadResult)(parsed);
23544
23791
  } catch (error51) {
@@ -23547,10 +23794,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23547
23794
  }
23548
23795
  }
23549
23796
  try {
23550
- const result = await client.storage.resolve.query({ uri });
23551
- learnCard.debug?.("LearnCloud read.get result", result);
23797
+ const result = await currentClient.storage.resolve.query({ uri });
23798
+ _learnCard.debug?.("LearnCloud read.get result", result);
23552
23799
  const decryptedResult = await _learnCard.invoke.decryptDagJwe(result);
23553
- learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23800
+ _learnCard.debug?.("LearnCloud read.get decryptedResult", decryptedResult);
23554
23801
  const parsed = await VCValidator.or(VPValidator).or(StoredCredentialEnvelopeValidator).parseAsync(decryptedResult);
23555
23802
  return (0, import_helpers.resolveStorageReadResult)(parsed);
23556
23803
  } catch (error51) {
@@ -23562,23 +23809,26 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23562
23809
  store: {
23563
23810
  upload: /* @__PURE__ */ __name(async (_learnCard, credential) => {
23564
23811
  _learnCard.debug?.("learnCard.store['LearnCard Network'].upload");
23565
- return client.storage.store.mutate({
23812
+ const currentClient = await updateLearnCard(_learnCard);
23813
+ return currentClient.storage.store.mutate({
23566
23814
  item: normalizeEnvelopeForTransport(credential)
23567
23815
  });
23568
23816
  }, "upload"),
23569
23817
  uploadEncrypted: /* @__PURE__ */ __name(async (_learnCard, credential, { recipients = [] } = { recipients: [] }) => {
23570
23818
  _learnCard.debug?.("learnCard.store['LearnCard Network'].upload");
23819
+ const currentClient = await updateLearnCard(_learnCard);
23571
23820
  const jwe = await _learnCard.invoke.createDagJwe(
23572
23821
  normalizeEnvelopeForTransport(credential),
23573
23822
  [_learnCard.id.did(), ...recipients]
23574
23823
  );
23575
- return client.storage.store.mutate({ item: jwe });
23824
+ return currentClient.storage.store.mutate({ item: jwe });
23576
23825
  }, "uploadEncrypted"),
23577
23826
  delete: /* @__PURE__ */ __name(async (_learnCard, uri) => {
23578
23827
  _learnCard.debug?.("learnCard.store['LearnCloud'].delete", { uri });
23828
+ const currentClient = await updateLearnCard(_learnCard);
23579
23829
  let deleted = false;
23580
23830
  try {
23581
- deleted = Boolean(await client.storage.delete.mutate({ uri }));
23831
+ deleted = Boolean(await currentClient.storage.delete.mutate({ uri }));
23582
23832
  } catch (error51) {
23583
23833
  _learnCard.debug?.("LearnCloud store.delete storage.delete failed", error51);
23584
23834
  }
@@ -23611,7 +23861,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23611
23861
  return records;
23612
23862
  }, "get"),
23613
23863
  getPage: /* @__PURE__ */ __name(async (_learnCard, query, paginationOptions) => {
23614
- await updateLearnCard(_learnCard);
23864
+ const currentClient = await updateLearnCard(_learnCard);
23615
23865
  _learnCard.debug?.("LearnCloud index.getPaginated", query, paginationOptions);
23616
23866
  const options = {
23617
23867
  ...paginationOptions,
@@ -23619,7 +23869,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23619
23869
  };
23620
23870
  if (!query) {
23621
23871
  _learnCard.debug?.("LearnCloud index.get (no query)");
23622
- const jwe2 = await client.index.get.query(options);
23872
+ const jwe2 = await currentClient.index.get.query(options);
23623
23873
  _learnCard.debug?.("LearnCloud index.get (no query response)", jwe2);
23624
23874
  const encryptedRecords2 = (0, import_helpers.isEncrypted)(jwe2) ? await decryptJWE(_learnCard, jwe2) : jwe2;
23625
23875
  _learnCard.debug?.(
@@ -23649,8 +23899,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23649
23899
  "LearnCloud index.get (query unencryptedEntries)",
23650
23900
  unencryptedEntries
23651
23901
  );
23652
- const jwe = await client.index.get.query({
23653
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23902
+ const jwe = await currentClient.index.get.query({
23903
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23654
23904
  ...unencryptedEntries,
23655
23905
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23656
23906
  }),
@@ -23672,10 +23922,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23672
23922
  };
23673
23923
  }, "getPage"),
23674
23924
  getCount: /* @__PURE__ */ __name(async (_learnCard, query) => {
23675
- await updateLearnCard(_learnCard);
23925
+ const currentClient = await updateLearnCard(_learnCard);
23676
23926
  if (!query) {
23677
23927
  _learnCard.debug?.("LearnCloud index.count (no query)");
23678
- const jwe2 = await client.index.count.query();
23928
+ const jwe2 = await currentClient.index.count.query();
23679
23929
  _learnCard.debug?.("LearnCloud index.count (no query response)", jwe2);
23680
23930
  const count2 = (0, import_helpers.isEncrypted)(jwe2) ? await decryptJWE(_learnCard, jwe2) : jwe2;
23681
23931
  _learnCard.debug?.("LearnCloud index.count (no query count)", count2);
@@ -23695,8 +23945,8 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23695
23945
  "LearnCloud index.getCount (query unencryptedEntries)",
23696
23946
  unencryptedEntries
23697
23947
  );
23698
- const jwe = await client.index.count.query({
23699
- query: await generateJWE(_learnCard, await getLearnCloudDid(), {
23948
+ const jwe = await currentClient.index.count.query({
23949
+ query: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23700
23950
  ...unencryptedEntries,
23701
23951
  ...fields.length > 0 ? { fields: { $in: fields } } : {}
23702
23952
  })
@@ -23707,10 +23957,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23707
23957
  return count;
23708
23958
  }, "getCount"),
23709
23959
  add: /* @__PURE__ */ __name(async (_learnCard, record2) => {
23710
- await updateLearnCard(_learnCard);
23960
+ const currentClient = await updateLearnCard(_learnCard);
23711
23961
  const id = record2.id || _learnCard.invoke.crypto().randomUUID();
23712
- return client.index.add.mutate({
23713
- record: await generateJWE(_learnCard, await getLearnCloudDid(), {
23962
+ return currentClient.index.add.mutate({
23963
+ record: await generateJWE(_learnCard, await getLearnCloudDid(currentClient), {
23714
23964
  ...await generateEncryptedRecord(
23715
23965
  _learnCard,
23716
23966
  { ...record2, id },
@@ -23721,7 +23971,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23721
23971
  });
23722
23972
  }, "add"),
23723
23973
  addMany: /* @__PURE__ */ __name(async (_learnCard, _records) => {
23724
- await updateLearnCard(_learnCard);
23974
+ const currentClient = await updateLearnCard(_learnCard);
23725
23975
  const results = await Promise.all(
23726
23976
  (0, import_lodash.chunk)(_records, 25).map(async (batch) => {
23727
23977
  const records = await Promise.all(
@@ -23737,10 +23987,10 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23737
23987
  };
23738
23988
  })
23739
23989
  );
23740
- return client.index.addMany.mutate({
23990
+ return currentClient.index.addMany.mutate({
23741
23991
  records: await generateJWE(
23742
23992
  _learnCard,
23743
- await getLearnCloudDid(),
23993
+ await getLearnCloudDid(currentClient),
23744
23994
  records
23745
23995
  )
23746
23996
  });
@@ -23749,27 +23999,27 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url2,
23749
23999
  return results.every(Boolean);
23750
24000
  }, "addMany"),
23751
24001
  update: /* @__PURE__ */ __name(async (_learnCard, id, updates) => {
23752
- await updateLearnCard(_learnCard);
24002
+ const currentClient = await updateLearnCard(_learnCard);
23753
24003
  const records = await _learnCard.index.LearnCloud.get({ id });
23754
24004
  if (records.length !== 1) return false;
23755
24005
  const record2 = records[0];
23756
24006
  const newRecord = { ...record2, ...updates };
23757
- return client.index.update.mutate({
24007
+ return currentClient.index.update.mutate({
23758
24008
  id: await hash2(_learnCard, id),
23759
24009
  updates: await generateJWE(
23760
24010
  _learnCard,
23761
- await getLearnCloudDid(),
24011
+ await getLearnCloudDid(currentClient),
23762
24012
  await generateEncryptedRecord(_learnCard, newRecord, unencryptedFields)
23763
24013
  )
23764
24014
  });
23765
24015
  }, "update"),
23766
24016
  remove: /* @__PURE__ */ __name(async (_learnCard, id) => {
23767
- await updateLearnCard(_learnCard);
23768
- return client.index.remove.mutate({ id: await hash2(_learnCard, id) });
24017
+ const currentClient = await updateLearnCard(_learnCard);
24018
+ return currentClient.index.remove.mutate({ id: await hash2(_learnCard, id) });
23769
24019
  }, "remove"),
23770
24020
  removeAll: /* @__PURE__ */ __name(async (_learnCard) => {
23771
- await updateLearnCard(_learnCard);
23772
- return client.index.removeAll.mutate();
24021
+ const currentClient = await updateLearnCard(_learnCard);
24022
+ return currentClient.index.removeAll.mutate();
23773
24023
  }, "removeAll")
23774
24024
  }
23775
24025
  };