@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
@@ -7559,14 +7559,22 @@ var UnsignedVCValidator = object({
7559
7559
  }).catchall(any());
7560
7560
  var ProofValidator = object({
7561
7561
  type: string(),
7562
- created: string(),
7562
+ created: string().optional(),
7563
7563
  challenge: string().optional(),
7564
7564
  domain: string().optional(),
7565
7565
  nonce: string().optional(),
7566
7566
  proofPurpose: string(),
7567
7567
  verificationMethod: string(),
7568
7568
  jws: string().optional()
7569
- }).catchall(any());
7569
+ }).catchall(any()).superRefine((proof, ctx) => {
7570
+ if (proof.created === void 0 && (proof.type !== "DataIntegrityProof" || proof.cryptosuite !== "ecdsa-rdfc-2019")) {
7571
+ ctx.addIssue({
7572
+ code: "custom",
7573
+ path: ["created"],
7574
+ message: "created is required for this proof suite"
7575
+ });
7576
+ }
7577
+ });
7570
7578
  var VCValidator = UnsignedVCValidator.extend({
7571
7579
  proof: ProofValidator.or(ProofValidator.array())
7572
7580
  });
@@ -8001,6 +8009,201 @@ var StringQuery = union([
8001
8009
  $or: BaseStringQuery.array()
8002
8010
  })
8003
8011
  ]);
8012
+ var LearnCardRefreshAuthorizationValidator = object({ type: literal("LearnCardDIDAuth") }).catchall(any());
8013
+ var ManagedCredentialRefreshServiceValidator = object({
8014
+ id: string().min(1),
8015
+ type: literal("LearnCardCredentialRefresh2026"),
8016
+ authorization: LearnCardRefreshAuthorizationValidator.optional()
8017
+ }).catchall(any());
8018
+ var StandardCredentialRefreshServiceValidator = object({
8019
+ id: string().min(1),
8020
+ type: literal("1EdTechCredentialRefresh")
8021
+ }).catchall(any());
8022
+ union([
8023
+ ManagedCredentialRefreshServiceValidator,
8024
+ StandardCredentialRefreshServiceValidator
8025
+ ]);
8026
+ object({
8027
+ holder: object({
8028
+ profileId: string().optional(),
8029
+ did: string().min(1)
8030
+ }),
8031
+ credentialId: string().min(1)
8032
+ });
8033
+ object({
8034
+ refreshId: string().min(1),
8035
+ refreshService: ManagedCredentialRefreshServiceValidator.extend({
8036
+ authorization: LearnCardRefreshAuthorizationValidator
8037
+ })
8038
+ });
8039
+ var ManagedCredentialRefreshReceiptValidator = object({
8040
+ refreshId: string().min(1),
8041
+ refreshService: ManagedCredentialRefreshServiceValidator,
8042
+ credentialId: string().min(1),
8043
+ issuerDid: string().min(1),
8044
+ holderDid: string().min(1),
8045
+ credentialStatus: CredentialStatusValidator.or(
8046
+ CredentialStatusValidator.array()
8047
+ ).optional()
8048
+ }).strip();
8049
+ var InboxCredentialRefreshReceiptValidator = ManagedCredentialRefreshReceiptValidator.omit(
8050
+ { holderDid: true }
8051
+ ).extend({ holderDid: string().min(1).optional() });
8052
+ var CredentialRefreshSigningModeValidator = _enum(["issuer-signed", "signing-authority"]);
8053
+ var PublishCredentialRefreshBaseFields = {
8054
+ refreshId: string().min(1),
8055
+ notifyHolder: boolean().optional(),
8056
+ updateSummary: string().optional(),
8057
+ idempotencyKey: string().optional()
8058
+ };
8059
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8060
+ mode: literal("issuer-signed"),
8061
+ signedCredential: VCValidator
8062
+ }));
8063
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8064
+ mode: literal("signing-authority"),
8065
+ credential: UnsignedVCValidator,
8066
+ signingAuthority: object({
8067
+ type: string().min(1)
8068
+ }).catchall(any())
8069
+ }));
8070
+ object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
8071
+ mode: CredentialRefreshSigningModeValidator,
8072
+ signedCredential: VCValidator.optional(),
8073
+ credential: UnsignedVCValidator.optional(),
8074
+ signingAuthority: object({
8075
+ type: string().min(1)
8076
+ }).catchall(any()).optional()
8077
+ })).superRefine((input, ctx) => {
8078
+ if (input.mode === "issuer-signed" && !input.signedCredential) {
8079
+ ctx.addIssue({
8080
+ code: "custom",
8081
+ path: ["signedCredential"],
8082
+ message: "signedCredential is required for issuer-signed publication"
8083
+ });
8084
+ }
8085
+ if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
8086
+ ctx.addIssue({
8087
+ code: "custom",
8088
+ path: ["mode"],
8089
+ message: "issuer-signed publication cannot include signing-authority fields"
8090
+ });
8091
+ }
8092
+ if (input.mode === "signing-authority") {
8093
+ if (input.signedCredential !== void 0) {
8094
+ ctx.addIssue({
8095
+ code: "custom",
8096
+ path: ["signedCredential"],
8097
+ message: "signing-authority publication cannot include signedCredential"
8098
+ });
8099
+ }
8100
+ if (!input.credential) {
8101
+ ctx.addIssue({
8102
+ code: "custom",
8103
+ path: ["credential"],
8104
+ message: "credential is required for signing-authority publication"
8105
+ });
8106
+ }
8107
+ if (!input.signingAuthority) {
8108
+ ctx.addIssue({
8109
+ code: "custom",
8110
+ path: ["signingAuthority"],
8111
+ message: "signingAuthority is required for signing-authority publication"
8112
+ });
8113
+ }
8114
+ }
8115
+ });
8116
+ var PublishCredentialRefreshNotificationValidator = _enum([
8117
+ "queued",
8118
+ "suppressed",
8119
+ "not-applicable",
8120
+ /** Publication succeeded, but the post-commit notification enqueue must be retried. */
8121
+ "delivery-failed"
8122
+ ]);
8123
+ object({
8124
+ refreshId: string().min(1),
8125
+ version: number().int().positive(),
8126
+ publishedAt: string().min(1),
8127
+ notification: PublishCredentialRefreshNotificationValidator
8128
+ });
8129
+ var CredentialRefreshVersionMetadataValidator = object({
8130
+ version: number().int().positive(),
8131
+ publishedAt: string().min(1),
8132
+ effectiveAt: string().optional(),
8133
+ etag: string().optional(),
8134
+ signingMode: CredentialRefreshSigningModeValidator.optional(),
8135
+ updateSummary: string().optional()
8136
+ });
8137
+ object({
8138
+ refreshId: string().min(1),
8139
+ cursor: string().optional(),
8140
+ limit: number().int().positive().optional()
8141
+ });
8142
+ object({
8143
+ records: CredentialRefreshVersionMetadataValidator.array(),
8144
+ hasMore: boolean(),
8145
+ cursor: string().optional()
8146
+ });
8147
+ object({
8148
+ challenge: string().min(1),
8149
+ expiresAt: string().min(1),
8150
+ domain: string().optional(),
8151
+ scheme: literal("LearnCardDIDAuth").optional()
8152
+ });
8153
+ var PublicCredentialRefreshEnvelopeValidator = object({
8154
+ format: literal("vc"),
8155
+ credential: VCValidator,
8156
+ etag: string().optional()
8157
+ });
8158
+ var JweCredentialRefreshEnvelopeValidator = object({
8159
+ format: literal("jwe"),
8160
+ jwe: JWEValidator,
8161
+ etag: string().optional(),
8162
+ /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
8163
+ version: number().int().positive().optional()
8164
+ });
8165
+ discriminatedUnion("format", [
8166
+ PublicCredentialRefreshEnvelopeValidator,
8167
+ JweCredentialRefreshEnvelopeValidator
8168
+ ]);
8169
+ var CredentialRefreshFailureCodeValidator = _enum([
8170
+ "UNAVAILABLE",
8171
+ "TIMEOUT",
8172
+ "UNSUPPORTED_SERVICE",
8173
+ "UNAUTHORIZED",
8174
+ "MALFORMED_RESPONSE",
8175
+ "INVALID_PROOF",
8176
+ "ISSUER_MISMATCH",
8177
+ "ID_MISMATCH",
8178
+ "ROLLBACK",
8179
+ "REVOKED",
8180
+ "UNSAFE_ENDPOINT"
8181
+ ]);
8182
+ var CredentialRefreshUpdatedResultValidator = object({
8183
+ status: literal("updated"),
8184
+ credential: VCValidator,
8185
+ etag: string().optional(),
8186
+ managedVersion: number().int().positive().optional()
8187
+ });
8188
+ var CredentialRefreshUnchangedResultValidator = object({
8189
+ status: literal("unchanged"),
8190
+ checkedAt: string().min(1),
8191
+ etag: string().optional()
8192
+ });
8193
+ var CredentialRefreshUnsupportedResultValidator = object({
8194
+ status: literal("unsupported")
8195
+ });
8196
+ var CredentialRefreshFailedResultValidator = object({
8197
+ status: literal("failed"),
8198
+ code: CredentialRefreshFailureCodeValidator,
8199
+ retryable: boolean()
8200
+ });
8201
+ discriminatedUnion("status", [
8202
+ CredentialRefreshUpdatedResultValidator,
8203
+ CredentialRefreshUnchangedResultValidator,
8204
+ CredentialRefreshUnsupportedResultValidator,
8205
+ CredentialRefreshFailedResultValidator
8206
+ ]);
8004
8207
  var LCNProfileDisplayValidator = object({
8005
8208
  backgroundColor: string().optional(),
8006
8209
  backgroundImage: string().optional(),
@@ -8336,7 +8539,13 @@ var SendBoostInputValidator = object({
8336
8539
  "Options for email/phone recipients (Universal Inbox)"
8337
8540
  ),
8338
8541
  templateData: record(string(), unknown()).optional(),
8339
- integrationId: string().optional().describe("Integration ID for activity tracking")
8542
+ integrationId: string().optional().describe("Integration ID for activity tracking"),
8543
+ refresh: boolean().optional().describe(
8544
+ "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."
8545
+ ),
8546
+ idempotencyKey: string().min(1).max(200).optional().describe(
8547
+ "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."
8548
+ )
8340
8549
  }).refine((data) => data.templateUri || data.template || data.signedCredential, {
8341
8550
  message: "Either templateUri, template, or signedCredential must be provided.",
8342
8551
  path: ["templateUri"]
@@ -8352,8 +8561,12 @@ var SendBoostInputValidator = object({
8352
8561
  message: "guardianEmail must differ from recipient (self-approval not allowed)",
8353
8562
  path: ["options", "guardianEmail"]
8354
8563
  }
8355
- );
8564
+ ).refine((data) => !data.idempotencyKey || data.refresh === true, {
8565
+ message: "idempotencyKey is only supported with refresh: true.",
8566
+ path: ["idempotencyKey"]
8567
+ });
8356
8568
  var SendInboxResponseValidator = object({
8569
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
8357
8570
  issuanceId: string(),
8358
8571
  status: _enum(["PENDING", "ISSUED", "EXPIRED", "DELIVERED", "CLAIMED"]),
8359
8572
  claimUrl: string().url().optional().describe("Present when suppressDelivery=true"),
@@ -8368,8 +8581,34 @@ var SendBoostResponseValidator = object({
8368
8581
  activityId: string().describe("Links to the activity lifecycle for this issuance"),
8369
8582
  inbox: SendInboxResponseValidator.optional().describe(
8370
8583
  "Present when sent via email/phone (Universal Inbox)"
8584
+ ),
8585
+ refresh: ManagedCredentialRefreshReceiptValidator.optional().describe(
8586
+ "Present when managed refresh was requested: issuance metadata the issuer keeps to publish future updates"
8371
8587
  )
8372
8588
  });
8589
+ object({
8590
+ recipient: string(),
8591
+ templateUri: string().optional(),
8592
+ template: SendBoostTemplateValidator.optional(),
8593
+ contractUri: string().optional(),
8594
+ templateData: record(string(), unknown()).optional(),
8595
+ integrationId: string().optional(),
8596
+ /** Credential ID to allocate for; generated server-side when omitted. */
8597
+ credentialId: string().min(1).optional(),
8598
+ idempotencyKey: string().min(1).max(200).optional()
8599
+ }).refine((data) => Boolean(data.templateUri) !== Boolean(data.template), {
8600
+ message: "Provide exactly one of templateUri or template."
8601
+ });
8602
+ object({
8603
+ boostUri: string(),
8604
+ credentialId: string(),
8605
+ refreshId: string(),
8606
+ refreshService: ManagedCredentialRefreshServiceValidator,
8607
+ /** The DID to use as credentialSubject.id (recipient DID, or the profile's did:web). */
8608
+ holderDid: string(),
8609
+ /** Present when this idempotencyKey already completed: return it without signing. */
8610
+ completed: SendBoostResponseValidator.optional()
8611
+ });
8373
8612
  discriminatedUnion("type", [SendBoostInputValidator]);
8374
8613
  discriminatedUnion("type", [SendBoostResponseValidator]);
8375
8614
  var ConsentFlowTermsStatusValidator = _enum(["live", "stale", "withdrawn"]);
@@ -8445,15 +8684,6 @@ var ConsentFlowContractDataValidator = object({
8445
8684
  PaginationResponseValidator.extend({
8446
8685
  records: ConsentFlowContractDataValidator.array()
8447
8686
  });
8448
- var ConsentFlowContractDataForDidValidator = object({
8449
- credentials: object({ category: string(), uri: string() }).array(),
8450
- personal: record(string(), string()).default({}),
8451
- date: string(),
8452
- contractUri: string()
8453
- });
8454
- PaginationResponseValidator.extend({
8455
- records: ConsentFlowContractDataForDidValidator.array()
8456
- });
8457
8687
  var ConsentFlowTermValidator = object({
8458
8688
  sharing: boolean().optional(),
8459
8689
  shared: string().array().optional(),
@@ -8487,6 +8717,34 @@ PaginationResponseValidator.extend({
8487
8717
  status: ConsentFlowTermsStatusValidator
8488
8718
  }).array()
8489
8719
  });
8720
+ var ConsentFlowGuardianApprovalValidator = object({
8721
+ guardianProfileId: string(),
8722
+ guardianDid: string(),
8723
+ approvedAt: string().datetime(),
8724
+ contractUpdatedAt: string()
8725
+ });
8726
+ var ConsentFlowContractDataForDidValidator = object({
8727
+ credentials: object({ category: string(), uri: string() }).array(),
8728
+ personal: record(string(), string()).default({}),
8729
+ date: string(),
8730
+ createdAt: string().optional(),
8731
+ contractUpdatedAt: string(),
8732
+ contractExpiresAt: string().optional(),
8733
+ reasonForAccessing: string().optional(),
8734
+ guardian: object({
8735
+ required: boolean(),
8736
+ approved: boolean(),
8737
+ approval: ConsentFlowGuardianApprovalValidator.optional()
8738
+ }),
8739
+ contractUri: string(),
8740
+ termsUri: string(),
8741
+ status: ConsentFlowTermsStatusValidator,
8742
+ expiresAt: string().optional(),
8743
+ terms: ConsentFlowTermsValidator
8744
+ });
8745
+ PaginationResponseValidator.extend({
8746
+ records: ConsentFlowContractDataForDidValidator.array()
8747
+ });
8490
8748
  object({
8491
8749
  read: object({
8492
8750
  anonymize: boolean().optional(),
@@ -8547,6 +8805,7 @@ var ConsentFlowTransactionValidator = object({
8547
8805
  expiresAt: string().optional(),
8548
8806
  oneTime: boolean().optional(),
8549
8807
  terms: ConsentFlowTermsValidator.optional(),
8808
+ guardianApproval: ConsentFlowGuardianApprovalValidator.optional(),
8550
8809
  id: string(),
8551
8810
  action: ConsentFlowTransactionActionValidator,
8552
8811
  date: string(),
@@ -8680,6 +8939,7 @@ object({
8680
8939
  }, "error")
8681
8940
  }),
8682
8941
  scope: string(),
8942
+ actAs: string().optional(),
8683
8943
  createdAt: datetime({ error: "createdAt must be a valid ISO 8601 datetime string" }),
8684
8944
  expiresAt: datetime({ error: "expiresAt must be a valid ISO 8601 datetime string" }).nullish().optional()
8685
8945
  });
@@ -8751,6 +9011,8 @@ object({
8751
9011
  sessionJwt: string()
8752
9012
  });
8753
9013
  var InboxCredentialValidator = object({
9014
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
9015
+ refreshId: string().optional(),
8754
9016
  id: string(),
8755
9017
  credential: string().optional(),
8756
9018
  isSigned: boolean(),
@@ -8794,7 +9056,7 @@ var IssueInboxSigningAuthorityValidator = object({
8794
9056
  endpoint: string().url(),
8795
9057
  name: string()
8796
9058
  });
8797
- object({
9059
+ var IssueInboxCredentialValidator = object({
8798
9060
  // === CORE DATA (Required) ===
8799
9061
  // WHAT is being sent and WHO is it for?
8800
9062
  recipient: ContactMethodQueryValidator.describe("The recipient of the credential"),
@@ -8805,12 +9067,19 @@ object({
8805
9067
  templateUri: string().optional().describe(
8806
9068
  "URI of a boost template to use for issuance. The boost credential will be resolved and used. Mutually exclusive with credential field."
8807
9069
  ),
9070
+ refresh: boolean().optional().describe(
9071
+ "Allocate managed refresh before signing. Requires unsigned content and a registered signing authority; binds the holder on claim."
9072
+ ),
9073
+ idempotencyKey: string().min(1).max(200).optional(),
8808
9074
  // === OPTIONAL FEATURES ===
8809
9075
  // Add major, distinct features at the top level.
8810
9076
  //consentRequest: ConsentRequestValidator.optional(),
8811
9077
  // === PROCESS CONFIGURATION (Optional) ===
8812
9078
  // HOW should this issuance be handled?
8813
9079
  configuration: object({
9080
+ guardianEmail: string().email().optional().describe(
9081
+ "Require approval from this guardian before the recipient can claim. Must differ from the recipient email."
9082
+ ),
8814
9083
  signingAuthority: IssueInboxSigningAuthorityValidator.optional().describe(
8815
9084
  "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."
8816
9085
  ),
@@ -8864,17 +9133,133 @@ object({
8864
9133
  }).optional().describe(
8865
9134
  "Configuration for the credential issuance. If not provided, the default configuration will be used."
8866
9135
  )
9136
+ }).refine((data) => !data.idempotencyKey || data.refresh === true, {
9137
+ message: "idempotencyKey requires refresh: true."
8867
9138
  }).refine((data) => data.credential || data.templateUri, {
8868
9139
  message: "Either credential or templateUri must be provided.",
8869
9140
  path: ["credential"]
8870
- });
8871
- object({
9141
+ }).refine(
9142
+ (data) => {
9143
+ var _a2;
9144
+ return !((_a2 = data.configuration) == null ? void 0 : _a2.guardianEmail) || data.recipient.type !== "email" || data.configuration.guardianEmail.toLowerCase() !== data.recipient.value.toLowerCase();
9145
+ },
9146
+ {
9147
+ message: "guardianEmail must differ from recipient (self-approval not allowed)",
9148
+ path: ["configuration", "guardianEmail"]
9149
+ }
9150
+ );
9151
+ var IssueInboxCredentialResponseValidator = object({
9152
+ refresh: InboxCredentialRefreshReceiptValidator.optional(),
8872
9153
  issuanceId: string(),
8873
9154
  status: LCNInboxStatusEnumValidator,
8874
9155
  recipient: ContactMethodQueryValidator,
8875
9156
  claimUrl: string().url().optional(),
8876
9157
  recipientDid: string().optional()
8877
9158
  });
9159
+ var InboxBatchConfigurationValidator = IssueInboxCredentialValidator.shape.configuration.unwrap().extend({
9160
+ refresh: IssueInboxCredentialValidator.shape.refresh.describe(
9161
+ "Enable managed refresh by default. An item configuration.refresh overrides this value, including false."
9162
+ ),
9163
+ delivery: IssueInboxCredentialValidator.shape.configuration.unwrap().shape.delivery.unwrap().extend({ suppress: boolean().optional() }).optional()
9164
+ });
9165
+ var InboxBatchItemConfigurationValidator = InboxBatchConfigurationValidator.extend({
9166
+ guardianEmail: InboxBatchConfigurationValidator.shape.guardianEmail.nullable().describe(
9167
+ "Require guardian approval, or set null to clear a batch-level guardianEmail for this item."
9168
+ )
9169
+ });
9170
+ var IssueInboxCredentialBatchItemValidator = object(__spreadProps(__spreadValues({}, IssueInboxCredentialValidator.shape), {
9171
+ configuration: InboxBatchItemConfigurationValidator.optional(),
9172
+ idempotencyKey: string().max(256).optional()
9173
+ })).refine((data) => data.credential || data.templateUri, {
9174
+ message: "Either credential or templateUri must be provided.",
9175
+ path: ["credential"]
9176
+ }).describe(
9177
+ "One issuance: provide credential or templateUri. Invalid input is rejected at submission with its item index."
9178
+ );
9179
+ object({
9180
+ requestId: string().min(1).max(256).optional(),
9181
+ items: array(IssueInboxCredentialBatchItemValidator).min(1).max(100),
9182
+ configuration: InboxBatchConfigurationValidator.optional()
9183
+ }).superRefine((batch, ctx) => {
9184
+ batch.items.forEach((item, index) => {
9185
+ var _a2, _b;
9186
+ const itemGuardian = (_a2 = item.configuration) == null ? void 0 : _a2.guardianEmail;
9187
+ const guardian = itemGuardian === null ? void 0 : itemGuardian != null ? itemGuardian : (_b = batch.configuration) == null ? void 0 : _b.guardianEmail;
9188
+ if (guardian && item.recipient.type === "email" && guardian.toLowerCase() === item.recipient.value.toLowerCase()) {
9189
+ ctx.addIssue({
9190
+ code: "custom",
9191
+ path: ["items", index, "configuration", "guardianEmail"],
9192
+ message: "guardianEmail must differ from recipient (self-approval not allowed)"
9193
+ });
9194
+ }
9195
+ });
9196
+ });
9197
+ var InboxBatchErrorReasonValidator = _enum([
9198
+ "DUPLICATE_KEY",
9199
+ "IDEMPOTENCY_MISMATCH",
9200
+ "IN_PROGRESS",
9201
+ "UNCONFIRMED"
9202
+ ]);
9203
+ var IssueInboxCredentialBatchItemResultValidator = discriminatedUnion("success", [
9204
+ IssueInboxCredentialResponseValidator.extend({
9205
+ success: literal(true),
9206
+ index: number().int().nonnegative(),
9207
+ deduplicated: boolean().optional(),
9208
+ guardianStatus: GuardianStatusValidator.optional(),
9209
+ idempotencyKey: string().optional()
9210
+ }),
9211
+ object({
9212
+ success: literal(false),
9213
+ index: number().int().nonnegative(),
9214
+ idempotencyKey: string().optional(),
9215
+ recipient: ContactMethodQueryValidator.optional(),
9216
+ error: object({
9217
+ code: string(),
9218
+ message: string(),
9219
+ reason: InboxBatchErrorReasonValidator.optional()
9220
+ }),
9221
+ issuanceId: string().optional().describe(
9222
+ "Present when issuance completed but replay storage could not be confirmed. Reconcile this issuance; do not issue again with a new key."
9223
+ ),
9224
+ claimUrl: string().url().optional().describe(
9225
+ "Claim URL of the completed issuance, if available, when replay storage could not be confirmed."
9226
+ )
9227
+ })
9228
+ ]);
9229
+ var IssueInboxCredentialBatchResponseValidator = object({
9230
+ results: array(IssueInboxCredentialBatchItemResultValidator),
9231
+ summary: object({
9232
+ total: number(),
9233
+ succeeded: number(),
9234
+ failed: number(),
9235
+ deduplicated: number()
9236
+ })
9237
+ });
9238
+ object({
9239
+ batchId: string(),
9240
+ status: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9241
+ createdAt: string()
9242
+ });
9243
+ object({
9244
+ batchId: string(),
9245
+ createdAt: string(),
9246
+ done: boolean().describe(
9247
+ "True when no queued or processing items remain, including unconfirmed outcomes."
9248
+ ),
9249
+ status: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9250
+ items: array(
9251
+ object({
9252
+ index: number().int().nonnegative(),
9253
+ state: _enum(["QUEUED", "PROCESSING", "COMPLETED", "NEEDS_RECONCILIATION"]),
9254
+ result: IssueInboxCredentialBatchItemResultValidator.optional()
9255
+ })
9256
+ ),
9257
+ summary: IssueInboxCredentialBatchResponseValidator.shape.summary.extend({
9258
+ completed: number(),
9259
+ pending: number(),
9260
+ unconfirmed: number()
9261
+ })
9262
+ });
8878
9263
  var CredentialNameRefValidator = object({ name: string() }).passthrough();
8879
9264
  object({
8880
9265
  credential: VCValidator.or(VPValidator).or(UnsignedVCValidator).or(CredentialNameRefValidator).describe("The credential to issue, or a { name } reference to resolve a boost template."),
@@ -9360,6 +9745,7 @@ var CredentialActivityValidator = object({
9360
9745
  eventType: CredentialActivityEventTypeValidator,
9361
9746
  timestamp: string(),
9362
9747
  actorProfileId: string().optional(),
9748
+ onBehalfOf: string().optional(),
9363
9749
  recipientType: CredentialActivityRecipientTypeValidator,
9364
9750
  recipientIdentifier: string(),
9365
9751
  boostUri: string().optional(),
@@ -9508,188 +9894,6 @@ object({
9508
9894
  version: number().default(1),
9509
9895
  messages: array(inAppMessageValidator).default([])
9510
9896
  }).passthrough();
9511
- var LearnCardRefreshAuthorizationValidator = object({ type: literal("LearnCardDIDAuth") }).catchall(any());
9512
- var ManagedCredentialRefreshServiceValidator = object({
9513
- id: string().min(1),
9514
- type: literal("LearnCardCredentialRefresh2026"),
9515
- authorization: LearnCardRefreshAuthorizationValidator.optional()
9516
- }).catchall(any());
9517
- var StandardCredentialRefreshServiceValidator = object({
9518
- id: string().min(1),
9519
- type: literal("1EdTechCredentialRefresh")
9520
- }).catchall(any());
9521
- union([
9522
- ManagedCredentialRefreshServiceValidator,
9523
- StandardCredentialRefreshServiceValidator
9524
- ]);
9525
- object({
9526
- holder: object({
9527
- profileId: string().optional(),
9528
- did: string().min(1)
9529
- }),
9530
- credentialId: string().min(1)
9531
- });
9532
- object({
9533
- refreshId: string().min(1),
9534
- refreshService: ManagedCredentialRefreshServiceValidator.extend({
9535
- authorization: LearnCardRefreshAuthorizationValidator
9536
- })
9537
- });
9538
- var CredentialRefreshSigningModeValidator = _enum(["issuer-signed", "signing-authority"]);
9539
- var PublishCredentialRefreshBaseFields = {
9540
- refreshId: string().min(1),
9541
- notifyHolder: boolean().optional(),
9542
- updateSummary: string().optional(),
9543
- idempotencyKey: string().optional()
9544
- };
9545
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9546
- mode: literal("issuer-signed"),
9547
- signedCredential: VCValidator
9548
- }));
9549
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9550
- mode: literal("signing-authority"),
9551
- credential: UnsignedVCValidator,
9552
- signingAuthority: object({
9553
- type: string().min(1)
9554
- }).catchall(any())
9555
- }));
9556
- object(__spreadProps(__spreadValues({}, PublishCredentialRefreshBaseFields), {
9557
- mode: CredentialRefreshSigningModeValidator,
9558
- signedCredential: VCValidator.optional(),
9559
- credential: UnsignedVCValidator.optional(),
9560
- signingAuthority: object({
9561
- type: string().min(1)
9562
- }).catchall(any()).optional()
9563
- })).superRefine((input, ctx) => {
9564
- if (input.mode === "issuer-signed" && !input.signedCredential) {
9565
- ctx.addIssue({
9566
- code: "custom",
9567
- path: ["signedCredential"],
9568
- message: "signedCredential is required for issuer-signed publication"
9569
- });
9570
- }
9571
- if (input.mode === "issuer-signed" && (input.credential !== void 0 || input.signingAuthority !== void 0)) {
9572
- ctx.addIssue({
9573
- code: "custom",
9574
- path: ["mode"],
9575
- message: "issuer-signed publication cannot include signing-authority fields"
9576
- });
9577
- }
9578
- if (input.mode === "signing-authority") {
9579
- if (input.signedCredential !== void 0) {
9580
- ctx.addIssue({
9581
- code: "custom",
9582
- path: ["signedCredential"],
9583
- message: "signing-authority publication cannot include signedCredential"
9584
- });
9585
- }
9586
- if (!input.credential) {
9587
- ctx.addIssue({
9588
- code: "custom",
9589
- path: ["credential"],
9590
- message: "credential is required for signing-authority publication"
9591
- });
9592
- }
9593
- if (!input.signingAuthority) {
9594
- ctx.addIssue({
9595
- code: "custom",
9596
- path: ["signingAuthority"],
9597
- message: "signingAuthority is required for signing-authority publication"
9598
- });
9599
- }
9600
- }
9601
- });
9602
- var PublishCredentialRefreshNotificationValidator = _enum([
9603
- "queued",
9604
- "suppressed",
9605
- "not-applicable",
9606
- /** Publication succeeded, but the post-commit notification enqueue must be retried. */
9607
- "delivery-failed"
9608
- ]);
9609
- object({
9610
- refreshId: string().min(1),
9611
- version: number().int().positive(),
9612
- publishedAt: string().min(1),
9613
- notification: PublishCredentialRefreshNotificationValidator
9614
- });
9615
- var CredentialRefreshVersionMetadataValidator = object({
9616
- version: number().int().positive(),
9617
- publishedAt: string().min(1),
9618
- effectiveAt: string().optional(),
9619
- etag: string().optional(),
9620
- signingMode: CredentialRefreshSigningModeValidator.optional(),
9621
- updateSummary: string().optional()
9622
- });
9623
- object({
9624
- refreshId: string().min(1),
9625
- cursor: string().optional(),
9626
- limit: number().int().positive().optional()
9627
- });
9628
- object({
9629
- records: CredentialRefreshVersionMetadataValidator.array(),
9630
- hasMore: boolean(),
9631
- cursor: string().optional()
9632
- });
9633
- object({
9634
- challenge: string().min(1),
9635
- expiresAt: string().min(1),
9636
- domain: string().optional(),
9637
- scheme: literal("LearnCardDIDAuth").optional()
9638
- });
9639
- var PublicCredentialRefreshEnvelopeValidator = object({
9640
- format: literal("vc"),
9641
- credential: VCValidator,
9642
- etag: string().optional()
9643
- });
9644
- var JweCredentialRefreshEnvelopeValidator = object({
9645
- format: literal("jwe"),
9646
- jwe: JWEValidator,
9647
- etag: string().optional(),
9648
- /** Present on LearnCard-managed endpoints; optional for interoperable JWE services. */
9649
- version: number().int().positive().optional()
9650
- });
9651
- discriminatedUnion("format", [
9652
- PublicCredentialRefreshEnvelopeValidator,
9653
- JweCredentialRefreshEnvelopeValidator
9654
- ]);
9655
- var CredentialRefreshFailureCodeValidator = _enum([
9656
- "UNAVAILABLE",
9657
- "TIMEOUT",
9658
- "UNSUPPORTED_SERVICE",
9659
- "UNAUTHORIZED",
9660
- "MALFORMED_RESPONSE",
9661
- "INVALID_PROOF",
9662
- "ISSUER_MISMATCH",
9663
- "ID_MISMATCH",
9664
- "ROLLBACK",
9665
- "REVOKED",
9666
- "UNSAFE_ENDPOINT"
9667
- ]);
9668
- var CredentialRefreshUpdatedResultValidator = object({
9669
- status: literal("updated"),
9670
- credential: VCValidator,
9671
- etag: string().optional(),
9672
- managedVersion: number().int().positive().optional()
9673
- });
9674
- var CredentialRefreshUnchangedResultValidator = object({
9675
- status: literal("unchanged"),
9676
- checkedAt: string().min(1),
9677
- etag: string().optional()
9678
- });
9679
- var CredentialRefreshUnsupportedResultValidator = object({
9680
- status: literal("unsupported")
9681
- });
9682
- var CredentialRefreshFailedResultValidator = object({
9683
- status: literal("failed"),
9684
- code: CredentialRefreshFailureCodeValidator,
9685
- retryable: boolean()
9686
- });
9687
- discriminatedUnion("status", [
9688
- CredentialRefreshUpdatedResultValidator,
9689
- CredentialRefreshUnchangedResultValidator,
9690
- CredentialRefreshUnsupportedResultValidator,
9691
- CredentialRefreshFailedResultValidator
9692
- ]);
9693
9897
 
9694
9898
  exports.VerificationStatusEnum = VerificationStatusEnum;
9695
- //# sourceMappingURL=types.esm-41c5e340.js.map
9899
+ //# sourceMappingURL=types.esm-94c6d461.js.map