@learncard/react 2.12.5 → 2.12.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/cjs/{BoostGenericCard-8f95d226.js → BoostGenericCard-470b0e5a.js} +4 -4
  2. package/dist/cjs/BoostGenericCard-470b0e5a.js.map +1 -0
  3. package/dist/cjs/{CertificateDisplayCard-2f320b5f.js → CertificateDisplayCard-230b3faf.js} +3 -3
  4. package/dist/cjs/{CertificateDisplayCard-2f320b5f.js.map → CertificateDisplayCard-230b3faf.js.map} +1 -1
  5. package/dist/cjs/{MeritBadgeDisplayCard-34c47b12.js → MeritBadgeDisplayCard-a15ae981.js} +3 -3
  6. package/dist/cjs/{MeritBadgeDisplayCard-34c47b12.js.map → MeritBadgeDisplayCard-a15ae981.js.map} +1 -1
  7. package/dist/cjs/{MeritBadgeSkillsCount-82e3e799.js → MeritBadgeSkillsCount-d6ee29b1.js} +2 -2
  8. package/dist/cjs/{MeritBadgeSkillsCount-82e3e799.js.map → MeritBadgeSkillsCount-d6ee29b1.js.map} +1 -1
  9. package/dist/cjs/{SchoolIDCard-10796199.js → SchoolIDCard-2d3cbb2c.js} +3 -1184
  10. package/dist/cjs/SchoolIDCard-2d3cbb2c.js.map +1 -0
  11. package/dist/cjs/{VCCard-7f8bbd9e.js → VCCard-ff6aff86.js} +3 -3
  12. package/dist/cjs/{VCCard-7f8bbd9e.js.map → VCCard-ff6aff86.js.map} +1 -1
  13. package/dist/cjs/{VCDisplayBackFace-b11ec189.js → VCDisplayBackFace-a2ffb5cf.js} +3 -3
  14. package/dist/cjs/{VCDisplayBackFace-b11ec189.js.map → VCDisplayBackFace-a2ffb5cf.js.map} +1 -1
  15. package/dist/cjs/{VCDisplayCard-1abef239.js → VCDisplayCard-db565cac.js} +3 -3
  16. package/dist/cjs/{VCDisplayCard-1abef239.js.map → VCDisplayCard-db565cac.js.map} +1 -1
  17. package/dist/cjs/{VCDisplayCard2-b6a512f3.js → VCDisplayCard2-023672a4.js} +6 -5
  18. package/dist/cjs/{VCDisplayCard2-b6a512f3.js.map → VCDisplayCard2-023672a4.js.map} +1 -1
  19. package/dist/cjs/{VCVerificationPill-f50c4a12.js → VCVerificationPill-0db1d7c8.js} +2 -2
  20. package/dist/cjs/{VCVerificationPill-f50c4a12.js.map → VCVerificationPill-0db1d7c8.js.map} +1 -1
  21. package/dist/cjs/{credential.helpers-d70f97fa.js → credential.helpers-88f72e5c.js} +2 -2
  22. package/dist/cjs/{credential.helpers-d70f97fa.js.map → credential.helpers-88f72e5c.js.map} +1 -1
  23. package/dist/cjs/index-47efbf5b.js +1186 -0
  24. package/dist/cjs/index-47efbf5b.js.map +1 -0
  25. package/dist/cjs/index.js +13 -12
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/index14.js +13 -12
  28. package/dist/cjs/index14.js.map +1 -1
  29. package/dist/cjs/index22.js +4 -4
  30. package/dist/cjs/index31.js +2 -1
  31. package/dist/cjs/index31.js.map +1 -1
  32. package/dist/cjs/index39.js +10 -9
  33. package/dist/cjs/index39.js.map +1 -1
  34. package/dist/cjs/index4.js +3 -3
  35. package/dist/cjs/index40.js +4 -4
  36. package/dist/cjs/index41.js +5 -5
  37. package/dist/cjs/index42.js +6 -5
  38. package/dist/cjs/index42.js.map +1 -1
  39. package/dist/cjs/index43.js +1 -1
  40. package/dist/cjs/index46.js +2 -2
  41. package/dist/cjs/index7.js +3 -3
  42. package/dist/cjs/{types.esm-41c5e340.js → types.esm-94c6d461.js} +403 -199
  43. package/dist/cjs/types.esm-94c6d461.js.map +1 -0
  44. package/dist/esm/{BoostGenericCard-d468ab12.js → BoostGenericCard-c9916371.js} +4 -4
  45. package/dist/esm/BoostGenericCard-c9916371.js.map +1 -0
  46. package/dist/esm/{CertificateDisplayCard-d926cd2e.js → CertificateDisplayCard-b5399522.js} +3 -3
  47. package/dist/esm/{CertificateDisplayCard-d926cd2e.js.map → CertificateDisplayCard-b5399522.js.map} +1 -1
  48. package/dist/esm/{MeritBadgeDisplayCard-b9e76145.js → MeritBadgeDisplayCard-58245297.js} +3 -3
  49. package/dist/esm/{MeritBadgeDisplayCard-b9e76145.js.map → MeritBadgeDisplayCard-58245297.js.map} +1 -1
  50. package/dist/esm/{MeritBadgeSkillsCount-5da775e7.js → MeritBadgeSkillsCount-faee4025.js} +2 -2
  51. package/dist/esm/{MeritBadgeSkillsCount-5da775e7.js.map → MeritBadgeSkillsCount-faee4025.js.map} +1 -1
  52. package/dist/esm/{SchoolIDCard-f82e40bc.js → SchoolIDCard-fbd1cf6c.js} +2 -1183
  53. package/dist/esm/SchoolIDCard-fbd1cf6c.js.map +1 -0
  54. package/dist/esm/{VCCard-9c291d98.js → VCCard-d72f1f76.js} +3 -3
  55. package/dist/esm/{VCCard-9c291d98.js.map → VCCard-d72f1f76.js.map} +1 -1
  56. package/dist/esm/{VCDisplayBackFace-ccdfca64.js → VCDisplayBackFace-66b2683d.js} +3 -3
  57. package/dist/esm/{VCDisplayBackFace-ccdfca64.js.map → VCDisplayBackFace-66b2683d.js.map} +1 -1
  58. package/dist/esm/{VCDisplayCard-b40c212c.js → VCDisplayCard-64896eb8.js} +3 -3
  59. package/dist/esm/{VCDisplayCard-b40c212c.js.map → VCDisplayCard-64896eb8.js.map} +1 -1
  60. package/dist/esm/{VCDisplayCard2-3a4d2726.js → VCDisplayCard2-54710551.js} +6 -5
  61. package/dist/esm/{VCDisplayCard2-3a4d2726.js.map → VCDisplayCard2-54710551.js.map} +1 -1
  62. package/dist/esm/{VCVerificationPill-ce872239.js → VCVerificationPill-3e840476.js} +2 -2
  63. package/dist/esm/{VCVerificationPill-ce872239.js.map → VCVerificationPill-3e840476.js.map} +1 -1
  64. package/dist/esm/{credential.helpers-bd90d02f.js → credential.helpers-f4495f8f.js} +2 -2
  65. package/dist/esm/{credential.helpers-bd90d02f.js.map → credential.helpers-f4495f8f.js.map} +1 -1
  66. package/dist/esm/index-cbd2e9db.js +1184 -0
  67. package/dist/esm/index-cbd2e9db.js.map +1 -0
  68. package/dist/esm/index.js +13 -12
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/index14.js +13 -12
  71. package/dist/esm/index14.js.map +1 -1
  72. package/dist/esm/index22.js +4 -4
  73. package/dist/esm/index31.js +2 -1
  74. package/dist/esm/index31.js.map +1 -1
  75. package/dist/esm/index39.js +10 -9
  76. package/dist/esm/index39.js.map +1 -1
  77. package/dist/esm/index4.js +3 -3
  78. package/dist/esm/index40.js +4 -4
  79. package/dist/esm/index41.js +5 -5
  80. package/dist/esm/index42.js +6 -5
  81. package/dist/esm/index42.js.map +1 -1
  82. package/dist/esm/index43.js +1 -1
  83. package/dist/esm/index46.js +2 -2
  84. package/dist/esm/index7.js +3 -3
  85. package/dist/esm/{types.esm-277415d8.js → types.esm-434cff58.js} +403 -199
  86. package/dist/esm/types.esm-434cff58.js.map +1 -0
  87. package/dist/main.css +1 -1
  88. package/dist/main.js +1 -1
  89. package/package.json +4 -4
  90. package/src/assets/styles/main.css +10 -0
  91. package/src/components/BoostGenericCard/BoostGenericCard.stories.tsx +41 -1
  92. package/src/components/BoostGenericCard/BoostGenericCard.tsx +2 -2
  93. package/src/components/BoostGenericCard/__tests__/BoostGenericCard.a11y.test.tsx +25 -0
  94. package/dist/cjs/BoostGenericCard-8f95d226.js.map +0 -1
  95. package/dist/cjs/SchoolIDCard-10796199.js.map +0 -1
  96. package/dist/cjs/types.esm-41c5e340.js.map +0 -1
  97. package/dist/esm/BoostGenericCard-d468ab12.js.map +0 -1
  98. package/dist/esm/SchoolIDCard-f82e40bc.js.map +0 -1
  99. package/dist/esm/types.esm-277415d8.js.map +0 -1
@@ -7557,14 +7557,22 @@ var UnsignedVCValidator = object({
7557
7557
  }).catchall(any());
7558
7558
  var ProofValidator = object({
7559
7559
  type: string(),
7560
- created: string(),
7560
+ created: string().optional(),
7561
7561
  challenge: string().optional(),
7562
7562
  domain: string().optional(),
7563
7563
  nonce: string().optional(),
7564
7564
  proofPurpose: string(),
7565
7565
  verificationMethod: string(),
7566
7566
  jws: string().optional()
7567
- }).catchall(any());
7567
+ }).catchall(any()).superRefine((proof, ctx) => {
7568
+ if (proof.created === void 0 && (proof.type !== "DataIntegrityProof" || proof.cryptosuite !== "ecdsa-rdfc-2019")) {
7569
+ ctx.addIssue({
7570
+ code: "custom",
7571
+ path: ["created"],
7572
+ message: "created is required for this proof suite"
7573
+ });
7574
+ }
7575
+ });
7568
7576
  var VCValidator = UnsignedVCValidator.extend({
7569
7577
  proof: ProofValidator.or(ProofValidator.array())
7570
7578
  });
@@ -7999,6 +8007,201 @@ var StringQuery = union([
7999
8007
  $or: BaseStringQuery.array()
8000
8008
  })
8001
8009
  ]);
8010
+ var LearnCardRefreshAuthorizationValidator = object({ type: literal("LearnCardDIDAuth") }).catchall(any());
8011
+ var ManagedCredentialRefreshServiceValidator = object({
8012
+ id: string().min(1),
8013
+ type: literal("LearnCardCredentialRefresh2026"),
8014
+ authorization: LearnCardRefreshAuthorizationValidator.optional()
8015
+ }).catchall(any());
8016
+ var StandardCredentialRefreshServiceValidator = object({
8017
+ id: string().min(1),
8018
+ type: literal("1EdTechCredentialRefresh")
8019
+ }).catchall(any());
8020
+ union([
8021
+ ManagedCredentialRefreshServiceValidator,
8022
+ StandardCredentialRefreshServiceValidator
8023
+ ]);
8024
+ object({
8025
+ holder: object({
8026
+ profileId: string().optional(),
8027
+ did: string().min(1)
8028
+ }),
8029
+ credentialId: string().min(1)
8030
+ });
8031
+ object({
8032
+ refreshId: string().min(1),
8033
+ refreshService: ManagedCredentialRefreshServiceValidator.extend({
8034
+ authorization: LearnCardRefreshAuthorizationValidator
8035
+ })
8036
+ });
8037
+ var ManagedCredentialRefreshReceiptValidator = object({
8038
+ refreshId: string().min(1),
8039
+ refreshService: ManagedCredentialRefreshServiceValidator,
8040
+ credentialId: string().min(1),
8041
+ issuerDid: string().min(1),
8042
+ holderDid: string().min(1),
8043
+ credentialStatus: CredentialStatusValidator.or(
8044
+ CredentialStatusValidator.array()
8045
+ ).optional()
8046
+ }).strip();
8047
+ var InboxCredentialRefreshReceiptValidator = ManagedCredentialRefreshReceiptValidator.omit(
8048
+ { holderDid: true }
8049
+ ).extend({ holderDid: string().min(1).optional() });
8050
+ var CredentialRefreshSigningModeValidator = _enum(["issuer-signed", "signing-authority"]);
8051
+ var PublishCredentialRefreshBaseFields = {
8052
+ refreshId: string().min(1),
8053
+ notifyHolder: boolean().optional(),
8054
+ updateSummary: string().optional(),
8055
+ idempotencyKey: string().optional()
8056
+ };
8057
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8058
+ mode: literal("issuer-signed"),
8059
+ signedCredential: VCValidator
8060
+ }));
8061
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8062
+ mode: literal("signing-authority"),
8063
+ credential: UnsignedVCValidator,
8064
+ signingAuthority: object({
8065
+ type: string().min(1)
8066
+ }).catchall(any())
8067
+ }));
8068
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8069
+ mode: CredentialRefreshSigningModeValidator,
8070
+ signedCredential: VCValidator.optional(),
8071
+ credential: UnsignedVCValidator.optional(),
8072
+ signingAuthority: object({
8073
+ type: string().min(1)
8074
+ }).catchall(any()).optional()
8075
+ })).superRefine((input, ctx) => {
8076
+ if (input.mode === "issuer-signed" && !input.signedCredential) {
8077
+ ctx.addIssue({
8078
+ code: "custom",
8079
+ path: ["signedCredential"],
8080
+ message: "signedCredential is required for issuer-signed publication"
8081
+ });
8082
+ }
8083
+ if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
8084
+ ctx.addIssue({
8085
+ code: "custom",
8086
+ path: ["mode"],
8087
+ message: "issuer-signed publication cannot include signing-authority fields"
8088
+ });
8089
+ }
8090
+ if (input.mode === "signing-authority") {
8091
+ if (input.signedCredential !== void 0) {
8092
+ ctx.addIssue({
8093
+ code: "custom",
8094
+ path: ["signedCredential"],
8095
+ message: "signing-authority publication cannot include signedCredential"
8096
+ });
8097
+ }
8098
+ if (!input.credential) {
8099
+ ctx.addIssue({
8100
+ code: "custom",
8101
+ path: ["credential"],
8102
+ message: "credential is required for signing-authority publication"
8103
+ });
8104
+ }
8105
+ if (!input.signingAuthority) {
8106
+ ctx.addIssue({
8107
+ code: "custom",
8108
+ path: ["signingAuthority"],
8109
+ message: "signingAuthority is required for signing-authority publication"
8110
+ });
8111
+ }
8112
+ }
8113
+ });
8114
+ var PublishCredentialRefreshNotificationValidator = _enum([
8115
+ "queued",
8116
+ "suppressed",
8117
+ "not-applicable",
8118
+ /** Publication succeeded, but the post-commit notification enqueue must be retried. */
8119
+ "delivery-failed"
8120
+ ]);
8121
+ object({
8122
+ refreshId: string().min(1),
8123
+ version: number().int().positive(),
8124
+ publishedAt: string().min(1),
8125
+ notification: PublishCredentialRefreshNotificationValidator
8126
+ });
8127
+ var CredentialRefreshVersionMetadataValidator = object({
8128
+ version: number().int().positive(),
8129
+ publishedAt: string().min(1),
8130
+ effectiveAt: string().optional(),
8131
+ etag: string().optional(),
8132
+ signingMode: CredentialRefreshSigningModeValidator.optional(),
8133
+ updateSummary: string().optional()
8134
+ });
8135
+ object({
8136
+ refreshId: string().min(1),
8137
+ cursor: string().optional(),
8138
+ limit: number().int().positive().optional()
8139
+ });
8140
+ object({
8141
+ records: CredentialRefreshVersionMetadataValidator.array(),
8142
+ hasMore: boolean(),
8143
+ cursor: string().optional()
8144
+ });
8145
+ object({
8146
+ challenge: string().min(1),
8147
+ expiresAt: string().min(1),
8148
+ domain: string().optional(),
8149
+ scheme: literal("LearnCardDIDAuth").optional()
8150
+ });
8151
+ var PublicCredentialRefreshEnvelopeValidator = object({
8152
+ format: literal("vc"),
8153
+ credential: VCValidator,
8154
+ etag: string().optional()
8155
+ });
8156
+ var JweCredentialRefreshEnvelopeValidator = object({
8157
+ format: literal("jwe"),
8158
+ jwe: JWEValidator,
8159
+ etag: string().optional(),
8160
+ /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
8161
+ version: number().int().positive().optional()
8162
+ });
8163
+ discriminatedUnion("format", [
8164
+ PublicCredentialRefreshEnvelopeValidator,
8165
+ JweCredentialRefreshEnvelopeValidator
8166
+ ]);
8167
+ var CredentialRefreshFailureCodeValidator = _enum([
8168
+ "UNAVAILABLE",
8169
+ "TIMEOUT",
8170
+ "UNSUPPORTED_SERVICE",
8171
+ "UNAUTHORIZED",
8172
+ "MALFORMED_RESPONSE",
8173
+ "INVALID_PROOF",
8174
+ "ISSUER_MISMATCH",
8175
+ "ID_MISMATCH",
8176
+ "ROLLBACK",
8177
+ "REVOKED",
8178
+ "UNSAFE_ENDPOINT"
8179
+ ]);
8180
+ var CredentialRefreshUpdatedResultValidator = object({
8181
+ status: literal("updated"),
8182
+ credential: VCValidator,
8183
+ etag: string().optional(),
8184
+ managedVersion: number().int().positive().optional()
8185
+ });
8186
+ var CredentialRefreshUnchangedResultValidator = object({
8187
+ status: literal("unchanged"),
8188
+ checkedAt: string().min(1),
8189
+ etag: string().optional()
8190
+ });
8191
+ var CredentialRefreshUnsupportedResultValidator = object({
8192
+ status: literal("unsupported")
8193
+ });
8194
+ var CredentialRefreshFailedResultValidator = object({
8195
+ status: literal("failed"),
8196
+ code: CredentialRefreshFailureCodeValidator,
8197
+ retryable: boolean()
8198
+ });
8199
+ discriminatedUnion("status", [
8200
+ CredentialRefreshUpdatedResultValidator,
8201
+ CredentialRefreshUnchangedResultValidator,
8202
+ CredentialRefreshUnsupportedResultValidator,
8203
+ CredentialRefreshFailedResultValidator
8204
+ ]);
8002
8205
  var LCNProfileDisplayValidator = object({
8003
8206
  backgroundColor: string().optional(),
8004
8207
  backgroundImage: string().optional(),
@@ -8334,7 +8537,13 @@ var SendBoostInputValidator = object({
8334
8537
  "Options for email/phone recipients (Universal Inbox)"
8335
8538
  ),
8336
8539
  templateData: record(string(), unknown()).optional(),
8337
- integrationId: string().optional().describe("Integration ID for activity tracking")
8540
+ integrationId: string().optional().describe("Integration ID for activity tracking"),
8541
+ refresh: boolean().optional().describe(
8542
+ "Request managed credential refresh for this send. Profile/DID recipients use immediate issuance; email/phone recipients use deferred Universal Inbox signing and bind the holder at claim."
8543
+ ),
8544
+ idempotencyKey: string().min(1).max(200).optional().describe(
8545
+ "Caller-chosen key that makes a managed refresh send (refresh: true) safe to retry as a whole: retries with the same key reuse the same boost, refresh allocation and result. Reusing a key for a different request is rejected. With signedCredential, requires prior tRPC prepareRefreshableSend; direct REST callers omit the key and retry the exact signed credential and templateUri."
8546
+ )
8338
8547
  }).refine((data) => data.templateUri || data.template || data.signedCredential, {
8339
8548
  message: "Either templateUri, template, or signedCredential must be provided.",
8340
8549
  path: ["templateUri"]
@@ -8350,8 +8559,12 @@ var SendBoostInputValidator = object({
8350
8559
  message: "guardianEmail must differ from recipient (self-approval not allowed)",
8351
8560
  path: ["options", "guardianEmail"]
8352
8561
  }
8353
- );
8562
+ ).refine((data) => !data.idempotencyKey || data.refresh === true, {
8563
+ message: "idempotencyKey is only supported with refresh: true.",
8564
+ path: ["idempotencyKey"]
8565
+ });
8354
8566
  var SendInboxResponseValidator = object({
8567
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
8355
8568
  issuanceId: string(),
8356
8569
  status: _enum(["PENDING", "ISSUED", "EXPIRED", "DELIVERED", "CLAIMED"]),
8357
8570
  claimUrl: string().url().optional().describe("Present when suppressDelivery=true"),
@@ -8366,8 +8579,34 @@ var SendBoostResponseValidator = object({
8366
8579
  activityId: string().describe("Links to the activity lifecycle for this issuance"),
8367
8580
  inbox: SendInboxResponseValidator.optional().describe(
8368
8581
  "Present when sent via email/phone (Universal Inbox)"
8582
+ ),
8583
+ refresh: ManagedCredentialRefreshReceiptValidator.optional().describe(
8584
+ "Present when managed refresh was requested: issuance metadata the issuer keeps to publish future updates"
8369
8585
  )
8370
8586
  });
8587
+ object({
8588
+ recipient: string(),
8589
+ templateUri: string().optional(),
8590
+ template: SendBoostTemplateValidator.optional(),
8591
+ contractUri: string().optional(),
8592
+ templateData: record(string(), unknown()).optional(),
8593
+ integrationId: string().optional(),
8594
+ /** Credential ID to allocate for; generated server-side when omitted. */
8595
+ credentialId: string().min(1).optional(),
8596
+ idempotencyKey: string().min(1).max(200).optional()
8597
+ }).refine((data) => Boolean(data.templateUri) !== Boolean(data.template), {
8598
+ message: "Provide exactly one of templateUri or template."
8599
+ });
8600
+ object({
8601
+ boostUri: string(),
8602
+ credentialId: string(),
8603
+ refreshId: string(),
8604
+ refreshService: ManagedCredentialRefreshServiceValidator,
8605
+ /** The DID to use as credentialSubject.id (recipient DID, or the profile's did:web). */
8606
+ holderDid: string(),
8607
+ /** Present when this idempotencyKey already completed: return it without signing. */
8608
+ completed: SendBoostResponseValidator.optional()
8609
+ });
8371
8610
  discriminatedUnion("type", [SendBoostInputValidator]);
8372
8611
  discriminatedUnion("type", [SendBoostResponseValidator]);
8373
8612
  var ConsentFlowTermsStatusValidator = _enum(["live", "stale", "withdrawn"]);
@@ -8443,15 +8682,6 @@ var ConsentFlowContractDataValidator = object({
8443
8682
  PaginationResponseValidator.extend({
8444
8683
  records: ConsentFlowContractDataValidator.array()
8445
8684
  });
8446
- var ConsentFlowContractDataForDidValidator = object({
8447
- credentials: object({ category: string(), uri: string() }).array(),
8448
- personal: record(string(), string()).default({}),
8449
- date: string(),
8450
- contractUri: string()
8451
- });
8452
- PaginationResponseValidator.extend({
8453
- records: ConsentFlowContractDataForDidValidator.array()
8454
- });
8455
8685
  var ConsentFlowTermValidator = object({
8456
8686
  sharing: boolean().optional(),
8457
8687
  shared: string().array().optional(),
@@ -8485,6 +8715,34 @@ PaginationResponseValidator.extend({
8485
8715
  status: ConsentFlowTermsStatusValidator
8486
8716
  }).array()
8487
8717
  });
8718
+ var ConsentFlowGuardianApprovalValidator = object({
8719
+ guardianProfileId: string(),
8720
+ guardianDid: string(),
8721
+ approvedAt: string().datetime(),
8722
+ contractUpdatedAt: string()
8723
+ });
8724
+ var ConsentFlowContractDataForDidValidator = object({
8725
+ credentials: object({ category: string(), uri: string() }).array(),
8726
+ personal: record(string(), string()).default({}),
8727
+ date: string(),
8728
+ createdAt: string().optional(),
8729
+ contractUpdatedAt: string(),
8730
+ contractExpiresAt: string().optional(),
8731
+ reasonForAccessing: string().optional(),
8732
+ guardian: object({
8733
+ required: boolean(),
8734
+ approved: boolean(),
8735
+ approval: ConsentFlowGuardianApprovalValidator.optional()
8736
+ }),
8737
+ contractUri: string(),
8738
+ termsUri: string(),
8739
+ status: ConsentFlowTermsStatusValidator,
8740
+ expiresAt: string().optional(),
8741
+ terms: ConsentFlowTermsValidator
8742
+ });
8743
+ PaginationResponseValidator.extend({
8744
+ records: ConsentFlowContractDataForDidValidator.array()
8745
+ });
8488
8746
  object({
8489
8747
  read: object({
8490
8748
  anonymize: boolean().optional(),
@@ -8545,6 +8803,7 @@ var ConsentFlowTransactionValidator = object({
8545
8803
  expiresAt: string().optional(),
8546
8804
  oneTime: boolean().optional(),
8547
8805
  terms: ConsentFlowTermsValidator.optional(),
8806
+ guardianApproval: ConsentFlowGuardianApprovalValidator.optional(),
8548
8807
  id: string(),
8549
8808
  action: ConsentFlowTransactionActionValidator,
8550
8809
  date: string(),
@@ -8678,6 +8937,7 @@ object({
8678
8937
  }, "error")
8679
8938
  }),
8680
8939
  scope: string(),
8940
+ actAs: string().optional(),
8681
8941
  createdAt: datetime({ error: "createdAt must be a valid ISO 8601 datetime string" }),
8682
8942
  expiresAt: datetime({ error: "expiresAt must be a valid ISO 8601 datetime string" }).nullish().optional()
8683
8943
  });
@@ -8749,6 +9009,8 @@ object({
8749
9009
  sessionJwt: string()
8750
9010
  });
8751
9011
  var InboxCredentialValidator = object({
9012
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
9013
+ refreshId: string().optional(),
8752
9014
  id: string(),
8753
9015
  credential: string().optional(),
8754
9016
  isSigned: boolean(),
@@ -8792,7 +9054,7 @@ var IssueInboxSigningAuthorityValidator = object({
8792
9054
  endpoint: string().url(),
8793
9055
  name: string()
8794
9056
  });
8795
- object({
9057
+ var IssueInboxCredentialValidator = object({
8796
9058
  // === CORE DATA (Required) ===
8797
9059
  // WHAT is being sent and WHO is it for?
8798
9060
  recipient: ContactMethodQueryValidator.describe("The recipient of the credential"),
@@ -8803,12 +9065,19 @@ object({
8803
9065
  templateUri: string().optional().describe(
8804
9066
  "URI of a boost template to use for issuance. The boost credential will be resolved and used. Mutually exclusive with credential field."
8805
9067
  ),
9068
+ refresh: boolean().optional().describe(
9069
+ "Allocate managed refresh before signing. Requires unsigned content and a registered signing authority; binds the holder on claim."
9070
+ ),
9071
+ idempotencyKey: string().min(1).max(200).optional(),
8806
9072
  // === OPTIONAL FEATURES ===
8807
9073
  // Add major, distinct features at the top level.
8808
9074
  //consentRequest: ConsentRequestValidator.optional(),
8809
9075
  // === PROCESS CONFIGURATION (Optional) ===
8810
9076
  // HOW should this issuance be handled?
8811
9077
  configuration: object({
9078
+ guardianEmail: string().email().optional().describe(
9079
+ "Require approval from this guardian before the recipient can claim. Must differ from the recipient email."
9080
+ ),
8812
9081
  signingAuthority: IssueInboxSigningAuthorityValidator.optional().describe(
8813
9082
  "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."
8814
9083
  ),
@@ -8862,17 +9131,133 @@ object({
8862
9131
  }).optional().describe(
8863
9132
  "Configuration for the credential issuance. If not provided, the default configuration will be used."
8864
9133
  )
9134
+ }).refine((data) => !data.idempotencyKey || data.refresh === true, {
9135
+ message: "idempotencyKey requires refresh: true."
8865
9136
  }).refine((data) => data.credential || data.templateUri, {
8866
9137
  message: "Either credential or templateUri must be provided.",
8867
9138
  path: ["credential"]
8868
- });
8869
- object({
9139
+ }).refine(
9140
+ (data) => {
9141
+ var _a2;
9142
+ return !((_a2 = data.configuration) == null ? void 0 : _a2.guardianEmail) || data.recipient.type !== "email" || data.configuration.guardianEmail.toLowerCase() !== data.recipient.value.toLowerCase();
9143
+ },
9144
+ {
9145
+ message: "guardianEmail must differ from recipient (self-approval not allowed)",
9146
+ path: ["configuration", "guardianEmail"]
9147
+ }
9148
+ );
9149
+ var IssueInboxCredentialResponseValidator = object({
9150
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
8870
9151
  issuanceId: string(),
8871
9152
  status: LCNInboxStatusEnumValidator,
8872
9153
  recipient: ContactMethodQueryValidator,
8873
9154
  claimUrl: string().url().optional(),
8874
9155
  recipientDid: string().optional()
8875
9156
  });
9157
+ var InboxBatchConfigurationValidator = IssueInboxCredentialValidator.shape.configuration.unwrap().extend({
9158
+ refresh: IssueInboxCredentialValidator.shape.refresh.describe(
9159
+ "Enable managed refresh by default. An item configuration.refresh overrides this value, including false."
9160
+ ),
9161
+ delivery: IssueInboxCredentialValidator.shape.configuration.unwrap().shape.delivery.unwrap().extend({ suppress: boolean().optional() }).optional()
9162
+ });
9163
+ var InboxBatchItemConfigurationValidator = InboxBatchConfigurationValidator.extend({
9164
+ guardianEmail: InboxBatchConfigurationValidator.shape.guardianEmail.nullable().describe(
9165
+ "Require guardian approval, or set null to clear a batch-level guardianEmail for this item."
9166
+ )
9167
+ });
9168
+ var IssueInboxCredentialBatchItemValidator = object(__spreadProps(__spreadValues({}, IssueInboxCredentialValidator.shape), {
9169
+ configuration: InboxBatchItemConfigurationValidator.optional(),
9170
+ idempotencyKey: string().max(256).optional()
9171
+ })).refine((data) => data.credential || data.templateUri, {
9172
+ message: "Either credential or templateUri must be provided.",
9173
+ path: ["credential"]
9174
+ }).describe(
9175
+ "One issuance: provide credential or templateUri. Invalid input is rejected at submission with its item index."
9176
+ );
9177
+ object({
9178
+ requestId: string().min(1).max(256).optional(),
9179
+ items: array(IssueInboxCredentialBatchItemValidator).min(1).max(100),
9180
+ configuration: InboxBatchConfigurationValidator.optional()
9181
+ }).superRefine((batch, ctx) => {
9182
+ batch.items.forEach((item, index) => {
9183
+ var _a2, _b;
9184
+ const itemGuardian = (_a2 = item.configuration) == null ? void 0 : _a2.guardianEmail;
9185
+ const guardian = itemGuardian === null ? void 0 : itemGuardian != null ? itemGuardian : (_b = batch.configuration) == null ? void 0 : _b.guardianEmail;
9186
+ if (guardian && item.recipient.type === "email" && guardian.toLowerCase() === item.recipient.value.toLowerCase()) {
9187
+ ctx.addIssue({
9188
+ code: "custom",
9189
+ path: ["items", index, "configuration", "guardianEmail"],
9190
+ message: "guardianEmail must differ from recipient (self-approval not allowed)"
9191
+ });
9192
+ }
9193
+ });
9194
+ });
9195
+ var InboxBatchErrorReasonValidator = _enum([
9196
+ "DUPLICATE_KEY",
9197
+ "IDEMPOTENCY_MISMATCH",
9198
+ "IN_PROGRESS",
9199
+ "UNCONFIRMED"
9200
+ ]);
9201
+ var IssueInboxCredentialBatchItemResultValidator = discriminatedUnion("success", [
9202
+ IssueInboxCredentialResponseValidator.extend({
9203
+ success: literal(true),
9204
+ index: number().int().nonnegative(),
9205
+ deduplicated: boolean().optional(),
9206
+ guardianStatus: GuardianStatusValidator.optional(),
9207
+ idempotencyKey: string().optional()
9208
+ }),
9209
+ object({
9210
+ success: literal(false),
9211
+ index: number().int().nonnegative(),
9212
+ idempotencyKey: string().optional(),
9213
+ recipient: ContactMethodQueryValidator.optional(),
9214
+ error: object({
9215
+ code: string(),
9216
+ message: string(),
9217
+ reason: InboxBatchErrorReasonValidator.optional()
9218
+ }),
9219
+ issuanceId: string().optional().describe(
9220
+ "Present when issuance completed but replay storage could not be confirmed. Reconcile this issuance; do not issue again with a new key."
9221
+ ),
9222
+ claimUrl: string().url().optional().describe(
9223
+ "Claim URL of the completed issuance, if available, when replay storage could not be confirmed."
9224
+ )
9225
+ })
9226
+ ]);
9227
+ var IssueInboxCredentialBatchResponseValidator = object({
9228
+ results: array(IssueInboxCredentialBatchItemResultValidator),
9229
+ summary: object({
9230
+ total: number(),
9231
+ succeeded: number(),
9232
+ failed: number(),
9233
+ deduplicated: number()
9234
+ })
9235
+ });
9236
+ object({
9237
+ batchId: string(),
9238
+ status: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9239
+ createdAt: string()
9240
+ });
9241
+ object({
9242
+ batchId: string(),
9243
+ createdAt: string(),
9244
+ done: boolean().describe(
9245
+ "True when no queued or processing items remain, including unconfirmed outcomes."
9246
+ ),
9247
+ status: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9248
+ items: array(
9249
+ object({
9250
+ index: number().int().nonnegative(),
9251
+ state: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9252
+ result: IssueInboxCredentialBatchItemResultValidator.optional()
9253
+ })
9254
+ ),
9255
+ summary: IssueInboxCredentialBatchResponseValidator.shape.summary.extend({
9256
+ completed: number(),
9257
+ pending: number(),
9258
+ unconfirmed: number()
9259
+ })
9260
+ });
8876
9261
  var CredentialNameRefValidator = object({ name: string() }).passthrough();
8877
9262
  object({
8878
9263
  credential: VCValidator.or(VPValidator).or(UnsignedVCValidator).or(CredentialNameRefValidator).describe("The credential to issue, or a { name } reference to resolve a boost template."),
@@ -9358,6 +9743,7 @@ var CredentialActivityValidator = object({
9358
9743
  eventType: CredentialActivityEventTypeValidator,
9359
9744
  timestamp: string(),
9360
9745
  actorProfileId: string().optional(),
9746
+ onBehalfOf: string().optional(),
9361
9747
  recipientType: CredentialActivityRecipientTypeValidator,
9362
9748
  recipientIdentifier: string(),
9363
9749
  boostUri: string().optional(),
@@ -9506,188 +9892,6 @@ object({
9506
9892
  version: number().default(1),
9507
9893
  messages: array(inAppMessageValidator).default([])
9508
9894
  }).passthrough();
9509
- var LearnCardRefreshAuthorizationValidator = object({ type: literal("LearnCardDIDAuth") }).catchall(any());
9510
- var ManagedCredentialRefreshServiceValidator = object({
9511
- id: string().min(1),
9512
- type: literal("LearnCardCredentialRefresh2026"),
9513
- authorization: LearnCardRefreshAuthorizationValidator.optional()
9514
- }).catchall(any());
9515
- var StandardCredentialRefreshServiceValidator = object({
9516
- id: string().min(1),
9517
- type: literal("1EdTechCredentialRefresh")
9518
- }).catchall(any());
9519
- union([
9520
- ManagedCredentialRefreshServiceValidator,
9521
- StandardCredentialRefreshServiceValidator
9522
- ]);
9523
- object({
9524
- holder: object({
9525
- profileId: string().optional(),
9526
- did: string().min(1)
9527
- }),
9528
- credentialId: string().min(1)
9529
- });
9530
- object({
9531
- refreshId: string().min(1),
9532
- refreshService: ManagedCredentialRefreshServiceValidator.extend({
9533
- authorization: LearnCardRefreshAuthorizationValidator
9534
- })
9535
- });
9536
- var CredentialRefreshSigningModeValidator = _enum(["issuer-signed", "signing-authority"]);
9537
- var PublishCredentialRefreshBaseFields = {
9538
- refreshId: string().min(1),
9539
- notifyHolder: boolean().optional(),
9540
- updateSummary: string().optional(),
9541
- idempotencyKey: string().optional()
9542
- };
9543
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9544
- mode: literal("issuer-signed"),
9545
- signedCredential: VCValidator
9546
- }));
9547
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9548
- mode: literal("signing-authority"),
9549
- credential: UnsignedVCValidator,
9550
- signingAuthority: object({
9551
- type: string().min(1)
9552
- }).catchall(any())
9553
- }));
9554
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9555
- mode: CredentialRefreshSigningModeValidator,
9556
- signedCredential: VCValidator.optional(),
9557
- credential: UnsignedVCValidator.optional(),
9558
- signingAuthority: object({
9559
- type: string().min(1)
9560
- }).catchall(any()).optional()
9561
- })).superRefine((input, ctx) => {
9562
- if (input.mode === "issuer-signed" && !input.signedCredential) {
9563
- ctx.addIssue({
9564
- code: "custom",
9565
- path: ["signedCredential"],
9566
- message: "signedCredential is required for issuer-signed publication"
9567
- });
9568
- }
9569
- if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
9570
- ctx.addIssue({
9571
- code: "custom",
9572
- path: ["mode"],
9573
- message: "issuer-signed publication cannot include signing-authority fields"
9574
- });
9575
- }
9576
- if (input.mode === "signing-authority") {
9577
- if (input.signedCredential !== void 0) {
9578
- ctx.addIssue({
9579
- code: "custom",
9580
- path: ["signedCredential"],
9581
- message: "signing-authority publication cannot include signedCredential"
9582
- });
9583
- }
9584
- if (!input.credential) {
9585
- ctx.addIssue({
9586
- code: "custom",
9587
- path: ["credential"],
9588
- message: "credential is required for signing-authority publication"
9589
- });
9590
- }
9591
- if (!input.signingAuthority) {
9592
- ctx.addIssue({
9593
- code: "custom",
9594
- path: ["signingAuthority"],
9595
- message: "signingAuthority is required for signing-authority publication"
9596
- });
9597
- }
9598
- }
9599
- });
9600
- var PublishCredentialRefreshNotificationValidator = _enum([
9601
- "queued",
9602
- "suppressed",
9603
- "not-applicable",
9604
- /** Publication succeeded, but the post-commit notification enqueue must be retried. */
9605
- "delivery-failed"
9606
- ]);
9607
- object({
9608
- refreshId: string().min(1),
9609
- version: number().int().positive(),
9610
- publishedAt: string().min(1),
9611
- notification: PublishCredentialRefreshNotificationValidator
9612
- });
9613
- var CredentialRefreshVersionMetadataValidator = object({
9614
- version: number().int().positive(),
9615
- publishedAt: string().min(1),
9616
- effectiveAt: string().optional(),
9617
- etag: string().optional(),
9618
- signingMode: CredentialRefreshSigningModeValidator.optional(),
9619
- updateSummary: string().optional()
9620
- });
9621
- object({
9622
- refreshId: string().min(1),
9623
- cursor: string().optional(),
9624
- limit: number().int().positive().optional()
9625
- });
9626
- object({
9627
- records: CredentialRefreshVersionMetadataValidator.array(),
9628
- hasMore: boolean(),
9629
- cursor: string().optional()
9630
- });
9631
- object({
9632
- challenge: string().min(1),
9633
- expiresAt: string().min(1),
9634
- domain: string().optional(),
9635
- scheme: literal("LearnCardDIDAuth").optional()
9636
- });
9637
- var PublicCredentialRefreshEnvelopeValidator = object({
9638
- format: literal("vc"),
9639
- credential: VCValidator,
9640
- etag: string().optional()
9641
- });
9642
- var JweCredentialRefreshEnvelopeValidator = object({
9643
- format: literal("jwe"),
9644
- jwe: JWEValidator,
9645
- etag: string().optional(),
9646
- /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
9647
- version: number().int().positive().optional()
9648
- });
9649
- discriminatedUnion("format", [
9650
- PublicCredentialRefreshEnvelopeValidator,
9651
- JweCredentialRefreshEnvelopeValidator
9652
- ]);
9653
- var CredentialRefreshFailureCodeValidator = _enum([
9654
- "UNAVAILABLE",
9655
- "TIMEOUT",
9656
- "UNSUPPORTED_SERVICE",
9657
- "UNAUTHORIZED",
9658
- "MALFORMED_RESPONSE",
9659
- "INVALID_PROOF",
9660
- "ISSUER_MISMATCH",
9661
- "ID_MISMATCH",
9662
- "ROLLBACK",
9663
- "REVOKED",
9664
- "UNSAFE_ENDPOINT"
9665
- ]);
9666
- var CredentialRefreshUpdatedResultValidator = object({
9667
- status: literal("updated"),
9668
- credential: VCValidator,
9669
- etag: string().optional(),
9670
- managedVersion: number().int().positive().optional()
9671
- });
9672
- var CredentialRefreshUnchangedResultValidator = object({
9673
- status: literal("unchanged"),
9674
- checkedAt: string().min(1),
9675
- etag: string().optional()
9676
- });
9677
- var CredentialRefreshUnsupportedResultValidator = object({
9678
- status: literal("unsupported")
9679
- });
9680
- var CredentialRefreshFailedResultValidator = object({
9681
- status: literal("failed"),
9682
- code: CredentialRefreshFailureCodeValidator,
9683
- retryable: boolean()
9684
- });
9685
- discriminatedUnion("status", [
9686
- CredentialRefreshUpdatedResultValidator,
9687
- CredentialRefreshUnchangedResultValidator,
9688
- CredentialRefreshUnsupportedResultValidator,
9689
- CredentialRefreshFailedResultValidator
9690
- ]);
9691
9895
 
9692
9896
  export { VerificationStatusEnum as V };
9693
- //# sourceMappingURL=types.esm-277415d8.js.map
9897
+ //# sourceMappingURL=types.esm-434cff58.js.map