@nokinc-flur/sdk 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -2878,6 +2878,331 @@ type AccountsClient = {
2878
2878
  };
2879
2879
  declare function createAccountsClient(opts: AccountsClientOptions): AccountsClient;
2880
2880
 
2881
+ /**
2882
+ * Offline verification of the unified Offline Authorization Certificate (OAC).
2883
+ *
2884
+ * The OAC is issuer-signed and folds identity (phoneE164, displayName, bound
2885
+ * device key) into the same credential that carries offline spend authority.
2886
+ * This lets two users who meet for the first time recognise and pay each
2887
+ * other WITHOUT a network round-trip: the verifier checks the issuer
2888
+ * signature against a *pinned* trusted issuer key (a Trust Bundle refreshed
2889
+ * whenever the device is online), never the key embedded in the credential.
2890
+ *
2891
+ * Trust model:
2892
+ * - Provisional offline authorization, authoritative online settlement.
2893
+ * A successful offline verify proves the credential was issued by Flur
2894
+ * and is within its validity window; the backend still re-checks
2895
+ * revocation, balance, and caps at settlement. Short OAC TTL is the
2896
+ * revocation-propagation mechanism — a revoked user cannot refresh and
2897
+ * their OAC expires within the issuance TTL.
2898
+ *
2899
+ * Wire format mirrors `flur-backend/src/offline-consumer/service.ts`
2900
+ * (`oacSigningPayload`): the issuer signs `canonicalJSONBytes({ domain, ...oac })`
2901
+ * with its P-256 key. Adding fields to `ConsumerOAC` automatically includes
2902
+ * them in the signed bytes, so identity is covered without a new domain.
2903
+ */
2904
+
2905
+ /**
2906
+ * Domain tag bound into the OAC issuer signature. MUST match
2907
+ * `OAC_DOMAIN` in `flur-backend/src/offline-consumer/service.ts`.
2908
+ */
2909
+ declare const CONSUMER_OAC_DOMAIN: "flur:consumer-offline:v1:oac";
2910
+ /**
2911
+ * A pinned issuer key the device trusts for offline OAC verification.
2912
+ * Sourced from the backend Trust Bundle (`GET /v1/issuer/keys`) and cached
2913
+ * on-device. `notBeforeMs` / `notAfterMs` bound the key's own validity so a
2914
+ * rotated-out key cannot be used to verify a freshly minted credential.
2915
+ */
2916
+ interface TrustedIssuerKey {
2917
+ issuerId: string;
2918
+ /** Issuer P-256 public key as SubjectPublicKeyInfo DER, base64. */
2919
+ publicKeySpkiB64: string;
2920
+ notBeforeMs?: number;
2921
+ notAfterMs?: number;
2922
+ }
2923
+ /** Identity surfaced to the caller after a successful offline verify. */
2924
+ interface OacOfflineIdentity {
2925
+ oacId: string;
2926
+ issuerId: string;
2927
+ userId: string;
2928
+ phoneE164: string;
2929
+ displayName: string;
2930
+ /** Holder's bound device key; lets the caller verify receipts offline. */
2931
+ devicePubkeySpkiB64: string;
2932
+ }
2933
+ type VerifyOacOfflineResult = {
2934
+ ok: true;
2935
+ oac: ConsumerOAC;
2936
+ identity: OacOfflineIdentity;
2937
+ } | {
2938
+ ok: false;
2939
+ reason: 'malformed' | 'untrusted_issuer' | 'signature_invalid' | 'window_too_long' | 'not_yet_valid' | 'expired' | 'revoked';
2940
+ };
2941
+ interface VerifyOacOfflineOptions {
2942
+ /** Override the wall clock; defaults to `Date.now()`. */
2943
+ nowMs?: number;
2944
+ /**
2945
+ * Verified revoked-OAC id set from a pinned revocation status-list (see
2946
+ * `verifyRevocationList`). When supplied, an otherwise-valid OAC whose
2947
+ * `oacId` is present is rejected with reason `'revoked'`. Omitting this
2948
+ * preserves the TTL-only revocation baseline.
2949
+ */
2950
+ revokedOacIds?: ReadonlySet<string>;
2951
+ }
2952
+ /** Canonical OAC payload (domain-bound) the backend issuer signs. */
2953
+ declare function consumerOacSigningPayload(oac: ConsumerOAC): {
2954
+ phoneE164: string;
2955
+ userId: string;
2956
+ deviceId: string;
2957
+ displayName: string;
2958
+ currency: string;
2959
+ perTxCapKobo: number;
2960
+ cumulativeCapKobo: number;
2961
+ validFromMs: number;
2962
+ validUntilMs: number;
2963
+ counterSeed: number;
2964
+ issuedAtMs: number;
2965
+ issuerId: string;
2966
+ oacId: string;
2967
+ alg: "p256";
2968
+ devicePubkeySpkiB64: string;
2969
+ domain: "flur:consumer-offline:v1:oac";
2970
+ };
2971
+ /**
2972
+ * Verify a signed OAC offline against a pinned set of trusted issuer keys.
2973
+ *
2974
+ * Security invariants:
2975
+ * - The signature is checked against the PINNED key for `oac.issuerId`,
2976
+ * never the credential-embedded `issuerPublicKeySpkiB64`. An attacker who
2977
+ * forges an OAC with their own key (and a matching embedded key) fails
2978
+ * because their key is not pinned.
2979
+ * - The pinned key's own validity window is enforced.
2980
+ * - The OAC validity window is enforced (`validFromMs <= now < validUntilMs`).
2981
+ */
2982
+ declare function verifyOacOffline(signed: SignedConsumerOAC, trustedKeys: readonly TrustedIssuerKey[], options?: VerifyOacOfflineOptions): VerifyOacOfflineResult;
2983
+ /**
2984
+ * QR prefix for a presented unified OAC. A holder shows this QR to be paid
2985
+ * and/or identified offline; the scanner decodes it and calls
2986
+ * `verifyOacOffline` against its pinned trust bundle. Distinct from the
2987
+ * settlement-receipt (`FLURSR1.`) and pay-card prefixes so the scanner can
2988
+ * dispatch by prefix without ambiguity.
2989
+ */
2990
+ declare const CONSUMER_OAC_QR_PREFIX: "FLUROAC1.";
2991
+ /** True iff `value` looks like a presented OAC QR payload. */
2992
+ declare function isConsumerOacQR(value: string): boolean;
2993
+ /**
2994
+ * Advisory "pay me" request a holder may attach to a presented OAC pay code:
2995
+ * an amount, a purpose/intent, and a free-text reference. This rides as an
2996
+ * UNSIGNED suffix on the QR (see {@link encodeConsumerOacQR}) — it is never
2997
+ * part of the issuer-signed credential and carries no authority. The payer's
2998
+ * app treats it purely as a prefill hint and always confirms the amount,
2999
+ * exactly as with a NIBSS dynamic QR.
3000
+ */
3001
+ declare const OacPresentmentRequestSchema: z.ZodObject<{
3002
+ /** Requested amount in minor units (kobo). */
3003
+ amountMinor: z.ZodOptional<z.ZodNumber>;
3004
+ /** Purpose/intent code (mirrors the NIBSS intent vocabulary). */
3005
+ intent: z.ZodOptional<z.ZodString>;
3006
+ /** Free-text reference / note. */
3007
+ reference: z.ZodOptional<z.ZodString>;
3008
+ }, "strict", z.ZodTypeAny, {
3009
+ amountMinor?: number | undefined;
3010
+ reference?: string | undefined;
3011
+ intent?: string | undefined;
3012
+ }, {
3013
+ amountMinor?: number | undefined;
3014
+ reference?: string | undefined;
3015
+ intent?: string | undefined;
3016
+ }>;
3017
+ type OacPresentmentRequest = z.infer<typeof OacPresentmentRequestSchema>;
3018
+ /**
3019
+ * Encode a signed OAC as a scannable QR payload. The envelope is validated
3020
+ * before encoding so a malformed credential can never be presented.
3021
+ *
3022
+ * An optional advisory {@link OacPresentmentRequest} is appended as a
3023
+ * dot-separated, base64url-encoded suffix:
3024
+ * `FLUROAC1.<base64url(signed)>.<base64url(request)>`
3025
+ * The signed segment is byte-identical with or without the suffix, so the
3026
+ * credential's verifiability is unaffected. An empty request adds no suffix.
3027
+ */
3028
+ declare function encodeConsumerOacQR(signed: SignedConsumerOAC, request?: OacPresentmentRequest): string;
3029
+ /**
3030
+ * Decode (WITHOUT verifying) a presented OAC QR back into a signed envelope.
3031
+ * Any advisory request suffix is ignored here — use
3032
+ * {@link decodeConsumerOacRequest} to read it. The caller MUST pass the result
3033
+ * to `verifyOacOffline` against pinned keys before trusting any field —
3034
+ * decoding proves nothing about authenticity.
3035
+ */
3036
+ declare function decodeUnverifiedConsumerOacQR(value: string): SignedConsumerOAC;
3037
+ /**
3038
+ * Read the advisory {@link OacPresentmentRequest} from a presented OAC QR, or
3039
+ * `null` if absent/malformed. This is purely a prefill hint and is NEVER
3040
+ * authoritative — a malformed suffix is treated as "no request" and never
3041
+ * throws, so a bad suffix can never block a verifiable credential.
3042
+ */
3043
+ declare function decodeConsumerOacRequest(value: string): OacPresentmentRequest | null;
3044
+
3045
+ /**
3046
+ * OAC revocation status-list — offline verification.
3047
+ *
3048
+ * Short OAC TTL (24h, rolling) is the BASELINE revocation-propagation
3049
+ * mechanism: a revoked user cannot refresh, so their credential lapses within
3050
+ * the issuance window. The revocation status-list shrinks that window from
3051
+ * "up to 24h" to "time since the device last pinned a fresh list": the issuer
3052
+ * publishes a signed list of OAC IDs that are revoked AND not yet expired, and
3053
+ * the offline verifier rejects any scanned OAC whose id appears in it.
3054
+ *
3055
+ * The list is naturally bounded: an OAC that lapses on its own TTL drops off
3056
+ * the list (expiry already covers it), so the published set only ever carries
3057
+ * revocations from roughly the last 24h.
3058
+ *
3059
+ * Trust model mirrors the OAC itself: the list is issuer-signed and verified
3060
+ * OFFLINE against the SAME pinned issuer trust bundle (`GET /v1/issuer/keys`),
3061
+ * never the key embedded in the payload. A `sequence` makes the list
3062
+ * monotonic so a device never accepts an older snapshot over a newer one.
3063
+ */
3064
+
3065
+ /**
3066
+ * Domain tag bound into the revocation-list issuer signature. MUST match
3067
+ * `REVOCATION_DOMAIN` in `flur-backend/src/offline-consumer/service.ts`.
3068
+ */
3069
+ declare const CONSUMER_REVOCATION_DOMAIN: "flur:consumer-offline:v1:revocation";
3070
+ /**
3071
+ * Hard cap on the number of revoked ids in a single list. Because the list
3072
+ * only carries unexpired revocations (~24h window), this bounds the payload
3073
+ * while comfortably exceeding any realistic revocation rate.
3074
+ */
3075
+ declare const REVOCATION_LIST_MAX_ENTRIES = 100000;
3076
+ declare const RevocationListSchema: z.ZodObject<{
3077
+ issuerId: z.ZodString;
3078
+ /**
3079
+ * Monotonic snapshot counter. A device MUST NOT replace a pinned list with
3080
+ * one carrying a lower sequence — this defeats a downgrade/rollback attack
3081
+ * that replays an older list to resurrect a revoked credential.
3082
+ */
3083
+ sequence: z.ZodNumber;
3084
+ issuedAtMs: z.ZodNumber;
3085
+ /**
3086
+ * Freshness bound. After this instant the list is considered stale and the
3087
+ * verifier treats it as untrustworthy (fail-closed), forcing a re-pin.
3088
+ * Optional so the issuer may publish a list without a hard expiry.
3089
+ */
3090
+ notAfterMs: z.ZodOptional<z.ZodNumber>;
3091
+ /** OAC ids that are revoked AND not yet past their own validity window. */
3092
+ revokedOacIds: z.ZodArray<z.ZodString, "many">;
3093
+ }, "strip", z.ZodTypeAny, {
3094
+ issuedAtMs: number;
3095
+ issuerId: string;
3096
+ sequence: number;
3097
+ revokedOacIds: string[];
3098
+ notAfterMs?: number | undefined;
3099
+ }, {
3100
+ issuedAtMs: number;
3101
+ issuerId: string;
3102
+ sequence: number;
3103
+ revokedOacIds: string[];
3104
+ notAfterMs?: number | undefined;
3105
+ }>;
3106
+ type RevocationList = z.infer<typeof RevocationListSchema>;
3107
+ declare const SignedRevocationListSchema: z.ZodObject<{
3108
+ list: z.ZodObject<{
3109
+ issuerId: z.ZodString;
3110
+ /**
3111
+ * Monotonic snapshot counter. A device MUST NOT replace a pinned list with
3112
+ * one carrying a lower sequence — this defeats a downgrade/rollback attack
3113
+ * that replays an older list to resurrect a revoked credential.
3114
+ */
3115
+ sequence: z.ZodNumber;
3116
+ issuedAtMs: z.ZodNumber;
3117
+ /**
3118
+ * Freshness bound. After this instant the list is considered stale and the
3119
+ * verifier treats it as untrustworthy (fail-closed), forcing a re-pin.
3120
+ * Optional so the issuer may publish a list without a hard expiry.
3121
+ */
3122
+ notAfterMs: z.ZodOptional<z.ZodNumber>;
3123
+ /** OAC ids that are revoked AND not yet past their own validity window. */
3124
+ revokedOacIds: z.ZodArray<z.ZodString, "many">;
3125
+ }, "strip", z.ZodTypeAny, {
3126
+ issuedAtMs: number;
3127
+ issuerId: string;
3128
+ sequence: number;
3129
+ revokedOacIds: string[];
3130
+ notAfterMs?: number | undefined;
3131
+ }, {
3132
+ issuedAtMs: number;
3133
+ issuerId: string;
3134
+ sequence: number;
3135
+ revokedOacIds: string[];
3136
+ notAfterMs?: number | undefined;
3137
+ }>;
3138
+ /** ASN.1 DER ECDSA P-256 issuer signature over the signing payload, base64. */
3139
+ issuerSig: z.ZodString;
3140
+ /** Issuer's P-256 public key as SubjectPublicKeyInfo DER, base64. */
3141
+ issuerPublicKeySpkiB64: z.ZodString;
3142
+ }, "strip", z.ZodTypeAny, {
3143
+ issuerSig: string;
3144
+ issuerPublicKeySpkiB64: string;
3145
+ list: {
3146
+ issuedAtMs: number;
3147
+ issuerId: string;
3148
+ sequence: number;
3149
+ revokedOacIds: string[];
3150
+ notAfterMs?: number | undefined;
3151
+ };
3152
+ }, {
3153
+ issuerSig: string;
3154
+ issuerPublicKeySpkiB64: string;
3155
+ list: {
3156
+ issuedAtMs: number;
3157
+ issuerId: string;
3158
+ sequence: number;
3159
+ revokedOacIds: string[];
3160
+ notAfterMs?: number | undefined;
3161
+ };
3162
+ }>;
3163
+ type SignedRevocationList = z.infer<typeof SignedRevocationListSchema>;
3164
+ type VerifyRevocationListResult = {
3165
+ ok: true;
3166
+ list: RevocationList;
3167
+ revokedOacIds: ReadonlySet<string>;
3168
+ } | {
3169
+ ok: false;
3170
+ reason: 'malformed' | 'untrusted_issuer' | 'signature_invalid' | 'stale';
3171
+ };
3172
+ interface VerifyRevocationListOptions {
3173
+ /** Override the wall clock; defaults to `Date.now()`. */
3174
+ nowMs?: number;
3175
+ }
3176
+ /**
3177
+ * Canonical revocation-list payload (domain-bound) the issuer signs.
3178
+ *
3179
+ * Cross-implementation contract (MUST match the backend signer byte-for-byte):
3180
+ * optional fields with no value are OMITTED from the signed object, never
3181
+ * emitted as `null` or `undefined`. `canonicalJSONBytes` rejects `undefined`
3182
+ * object values outright, so building the payload explicitly (rather than
3183
+ * spreading a `list` that may carry an explicit `notAfterMs: undefined`) keeps
3184
+ * verification total — it can never throw on a well-typed list — and keeps the
3185
+ * signed bytes identical whether `notAfterMs` was absent or explicitly unset.
3186
+ */
3187
+ declare function revocationListSigningPayload(list: RevocationList): Record<string, unknown>;
3188
+ /**
3189
+ * Verify a signed revocation list offline against pinned issuer keys.
3190
+ *
3191
+ * Security invariants (identical to `verifyOacOffline`):
3192
+ * - The signature is checked against the PINNED key for `list.issuerId`,
3193
+ * never the payload-embedded key.
3194
+ * - The pinned key's own validity window is enforced.
3195
+ * - A list past `notAfterMs` fails closed (`stale`) so a long-offline device
3196
+ * cannot keep trusting a frozen snapshot forever.
3197
+ *
3198
+ * Note: rollback protection via `sequence` is intentionally NOT enforced here
3199
+ * (verification is stateless). The caller persisting the pinned list MUST
3200
+ * reject any replacement whose `sequence` is lower than the pinned one.
3201
+ */
3202
+ declare function verifyRevocationList(signed: SignedRevocationList, trustedKeys: readonly TrustedIssuerKey[], options?: VerifyRevocationListOptions): VerifyRevocationListResult;
3203
+ /** True iff `oacId` appears in a verified revocation set. */
3204
+ declare function isOacRevoked(oacId: string, revokedOacIds: ReadonlySet<string>): boolean;
3205
+
2881
3206
  /**
2882
3207
  * Consumer-side Offline Collect SDK client.
2883
3208
  *
@@ -2915,14 +3240,14 @@ declare const IssuerTrustKeySchema: z.ZodObject<{
2915
3240
  issuerId: string;
2916
3241
  alg: "p256";
2917
3242
  publicKeySpkiB64: string;
2918
- notBeforeMs?: number | undefined;
2919
3243
  notAfterMs?: number | undefined;
3244
+ notBeforeMs?: number | undefined;
2920
3245
  }, {
2921
3246
  issuerId: string;
2922
3247
  alg: "p256";
2923
3248
  publicKeySpkiB64: string;
2924
- notBeforeMs?: number | undefined;
2925
3249
  notAfterMs?: number | undefined;
3250
+ notBeforeMs?: number | undefined;
2926
3251
  }>;
2927
3252
  type IssuerTrustKey = z.infer<typeof IssuerTrustKeySchema>;
2928
3253
  declare const IssuerTrustBundleSchema: z.ZodObject<{
@@ -2936,30 +3261,30 @@ declare const IssuerTrustBundleSchema: z.ZodObject<{
2936
3261
  issuerId: string;
2937
3262
  alg: "p256";
2938
3263
  publicKeySpkiB64: string;
2939
- notBeforeMs?: number | undefined;
2940
3264
  notAfterMs?: number | undefined;
3265
+ notBeforeMs?: number | undefined;
2941
3266
  }, {
2942
3267
  issuerId: string;
2943
3268
  alg: "p256";
2944
3269
  publicKeySpkiB64: string;
2945
- notBeforeMs?: number | undefined;
2946
3270
  notAfterMs?: number | undefined;
3271
+ notBeforeMs?: number | undefined;
2947
3272
  }>, "many">;
2948
3273
  }, "strip", z.ZodTypeAny, {
2949
3274
  keys: {
2950
3275
  issuerId: string;
2951
3276
  alg: "p256";
2952
3277
  publicKeySpkiB64: string;
2953
- notBeforeMs?: number | undefined;
2954
3278
  notAfterMs?: number | undefined;
3279
+ notBeforeMs?: number | undefined;
2955
3280
  }[];
2956
3281
  }, {
2957
3282
  keys: {
2958
3283
  issuerId: string;
2959
3284
  alg: "p256";
2960
3285
  publicKeySpkiB64: string;
2961
- notBeforeMs?: number | undefined;
2962
3286
  notAfterMs?: number | undefined;
3287
+ notBeforeMs?: number | undefined;
2963
3288
  }[];
2964
3289
  }>;
2965
3290
  type IssuerTrustBundle = z.infer<typeof IssuerTrustBundleSchema>;
@@ -3107,8 +3432,8 @@ declare const ConsumerOACSchema: z.ZodObject<{
3107
3432
  counterSeed: number;
3108
3433
  issuedAtMs: number;
3109
3434
  issuerId: string;
3110
- alg: "p256";
3111
3435
  oacId: string;
3436
+ alg: "p256";
3112
3437
  devicePubkeySpkiB64: string;
3113
3438
  }, {
3114
3439
  phoneE164: string;
@@ -3123,8 +3448,8 @@ declare const ConsumerOACSchema: z.ZodObject<{
3123
3448
  counterSeed: number;
3124
3449
  issuedAtMs: number;
3125
3450
  issuerId: string;
3126
- alg: "p256";
3127
3451
  oacId: string;
3452
+ alg: "p256";
3128
3453
  devicePubkeySpkiB64: string;
3129
3454
  }>;
3130
3455
  type ConsumerOAC = z.infer<typeof ConsumerOACSchema>;
@@ -3178,8 +3503,8 @@ declare const SignedConsumerOACSchema: z.ZodObject<{
3178
3503
  counterSeed: number;
3179
3504
  issuedAtMs: number;
3180
3505
  issuerId: string;
3181
- alg: "p256";
3182
3506
  oacId: string;
3507
+ alg: "p256";
3183
3508
  devicePubkeySpkiB64: string;
3184
3509
  }, {
3185
3510
  phoneE164: string;
@@ -3194,8 +3519,8 @@ declare const SignedConsumerOACSchema: z.ZodObject<{
3194
3519
  counterSeed: number;
3195
3520
  issuedAtMs: number;
3196
3521
  issuerId: string;
3197
- alg: "p256";
3198
3522
  oacId: string;
3523
+ alg: "p256";
3199
3524
  devicePubkeySpkiB64: string;
3200
3525
  }>;
3201
3526
  /** ASN.1 DER ECDSA P-256 issuer signature, base64. */
@@ -3217,8 +3542,8 @@ declare const SignedConsumerOACSchema: z.ZodObject<{
3217
3542
  counterSeed: number;
3218
3543
  issuedAtMs: number;
3219
3544
  issuerId: string;
3220
- alg: "p256";
3221
3545
  oacId: string;
3546
+ alg: "p256";
3222
3547
  devicePubkeySpkiB64: string;
3223
3548
  };
3224
3549
  issuerPublicKeySpkiB64: string;
@@ -3237,8 +3562,8 @@ declare const SignedConsumerOACSchema: z.ZodObject<{
3237
3562
  counterSeed: number;
3238
3563
  issuedAtMs: number;
3239
3564
  issuerId: string;
3240
- alg: "p256";
3241
3565
  oacId: string;
3566
+ alg: "p256";
3242
3567
  devicePubkeySpkiB64: string;
3243
3568
  };
3244
3569
  issuerPublicKeySpkiB64: string;
@@ -3294,8 +3619,8 @@ declare const OACRecordSchema: z.ZodObject<{
3294
3619
  counterSeed: number;
3295
3620
  issuedAtMs: number;
3296
3621
  issuerId: string;
3297
- alg: "p256";
3298
3622
  oacId: string;
3623
+ alg: "p256";
3299
3624
  devicePubkeySpkiB64: string;
3300
3625
  }, {
3301
3626
  phoneE164: string;
@@ -3310,8 +3635,8 @@ declare const OACRecordSchema: z.ZodObject<{
3310
3635
  counterSeed: number;
3311
3636
  issuedAtMs: number;
3312
3637
  issuerId: string;
3313
- alg: "p256";
3314
3638
  oacId: string;
3639
+ alg: "p256";
3315
3640
  devicePubkeySpkiB64: string;
3316
3641
  }>;
3317
3642
  /** ASN.1 DER ECDSA P-256 issuer signature, base64. */
@@ -3340,8 +3665,8 @@ declare const OACRecordSchema: z.ZodObject<{
3340
3665
  counterSeed: number;
3341
3666
  issuedAtMs: number;
3342
3667
  issuerId: string;
3343
- alg: "p256";
3344
3668
  oacId: string;
3669
+ alg: "p256";
3345
3670
  devicePubkeySpkiB64: string;
3346
3671
  };
3347
3672
  issuerPublicKeySpkiB64: string;
@@ -3364,8 +3689,8 @@ declare const OACRecordSchema: z.ZodObject<{
3364
3689
  counterSeed: number;
3365
3690
  issuedAtMs: number;
3366
3691
  issuerId: string;
3367
- alg: "p256";
3368
3692
  oacId: string;
3693
+ alg: "p256";
3369
3694
  devicePubkeySpkiB64: string;
3370
3695
  };
3371
3696
  issuerPublicKeySpkiB64: string;
@@ -3450,8 +3775,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3450
3775
  counterSeed: number;
3451
3776
  issuedAtMs: number;
3452
3777
  issuerId: string;
3453
- alg: "p256";
3454
3778
  oacId: string;
3779
+ alg: "p256";
3455
3780
  devicePubkeySpkiB64: string;
3456
3781
  }, {
3457
3782
  phoneE164: string;
@@ -3466,8 +3791,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3466
3791
  counterSeed: number;
3467
3792
  issuedAtMs: number;
3468
3793
  issuerId: string;
3469
- alg: "p256";
3470
3794
  oacId: string;
3795
+ alg: "p256";
3471
3796
  devicePubkeySpkiB64: string;
3472
3797
  }>;
3473
3798
  /** ASN.1 DER ECDSA P-256 issuer signature, base64. */
@@ -3496,8 +3821,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3496
3821
  counterSeed: number;
3497
3822
  issuedAtMs: number;
3498
3823
  issuerId: string;
3499
- alg: "p256";
3500
3824
  oacId: string;
3825
+ alg: "p256";
3501
3826
  devicePubkeySpkiB64: string;
3502
3827
  };
3503
3828
  issuerPublicKeySpkiB64: string;
@@ -3520,8 +3845,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3520
3845
  counterSeed: number;
3521
3846
  issuedAtMs: number;
3522
3847
  issuerId: string;
3523
- alg: "p256";
3524
3848
  oacId: string;
3849
+ alg: "p256";
3525
3850
  devicePubkeySpkiB64: string;
3526
3851
  };
3527
3852
  issuerPublicKeySpkiB64: string;
@@ -3546,8 +3871,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3546
3871
  counterSeed: number;
3547
3872
  issuedAtMs: number;
3548
3873
  issuerId: string;
3549
- alg: "p256";
3550
3874
  oacId: string;
3875
+ alg: "p256";
3551
3876
  devicePubkeySpkiB64: string;
3552
3877
  };
3553
3878
  issuerPublicKeySpkiB64: string;
@@ -3572,8 +3897,8 @@ declare const OfflineStatusResultSchema: z.ZodObject<{
3572
3897
  counterSeed: number;
3573
3898
  issuedAtMs: number;
3574
3899
  issuerId: string;
3575
- alg: "p256";
3576
3900
  oacId: string;
3901
+ alg: "p256";
3577
3902
  devicePubkeySpkiB64: string;
3578
3903
  };
3579
3904
  issuerPublicKeySpkiB64: string;
@@ -3621,8 +3946,8 @@ declare const ConsumerPaymentClaimSchema: z.ZodObject<{
3621
3946
  payerNonce: string;
3622
3947
  payeeNonce: string;
3623
3948
  occurredAtMs: number;
3624
- alg: "p256";
3625
3949
  oacId: string;
3950
+ alg: "p256";
3626
3951
  payerDeviceId: string;
3627
3952
  payerPubkeySpkiB64: string;
3628
3953
  payerSignatureDerB64: string;
@@ -3848,6 +4173,12 @@ type MeOfflineClient = {
3848
4173
  getSettlement: (idOrKey: string) => Promise<ConsumerSettlement>;
3849
4174
  /** Fetch the public pinned issuer trust bundle (`GET /v1/issuer/keys`). */
3850
4175
  getIssuerKeys: () => Promise<IssuerTrustBundle>;
4176
+ /**
4177
+ * Fetch the issuer-signed OAC revocation status-list
4178
+ * (`GET /v1/issuer/revocations`). Pinned and checked offline alongside the
4179
+ * issuer trust bundle to bound the revocation window below the OAC TTL.
4180
+ */
4181
+ getRevocations: () => Promise<SignedRevocationList>;
3851
4182
  };
3852
4183
  declare function createMeOfflineClient(opts: MeOfflineClientOptions): MeOfflineClient;
3853
4184
 
@@ -4104,163 +4435,6 @@ declare function verifyConsumerSettlementReceiptQR(value: string, issuerPublicKe
4104
4435
  declare function decodeConsumerSettlementReceiptQR(value: string): ConsumerSettlement;
4105
4436
  declare function decodeConsumerSettlementReceiptQR(value: string, issuerPublicKeySpkiB64: string): ConsumerSettlement;
4106
4437
 
4107
- /**
4108
- * Offline verification of the unified Offline Authorization Certificate (OAC).
4109
- *
4110
- * The OAC is issuer-signed and folds identity (phoneE164, displayName, bound
4111
- * device key) into the same credential that carries offline spend authority.
4112
- * This lets two users who meet for the first time recognise and pay each
4113
- * other WITHOUT a network round-trip: the verifier checks the issuer
4114
- * signature against a *pinned* trusted issuer key (a Trust Bundle refreshed
4115
- * whenever the device is online), never the key embedded in the credential.
4116
- *
4117
- * Trust model:
4118
- * - Provisional offline authorization, authoritative online settlement.
4119
- * A successful offline verify proves the credential was issued by Flur
4120
- * and is within its validity window; the backend still re-checks
4121
- * revocation, balance, and caps at settlement. Short OAC TTL is the
4122
- * revocation-propagation mechanism — a revoked user cannot refresh and
4123
- * their OAC expires within the issuance TTL.
4124
- *
4125
- * Wire format mirrors `flur-backend/src/offline-consumer/service.ts`
4126
- * (`oacSigningPayload`): the issuer signs `canonicalJSONBytes({ domain, ...oac })`
4127
- * with its P-256 key. Adding fields to `ConsumerOAC` automatically includes
4128
- * them in the signed bytes, so identity is covered without a new domain.
4129
- */
4130
-
4131
- /**
4132
- * Domain tag bound into the OAC issuer signature. MUST match
4133
- * `OAC_DOMAIN` in `flur-backend/src/offline-consumer/service.ts`.
4134
- */
4135
- declare const CONSUMER_OAC_DOMAIN: "flur:consumer-offline:v1:oac";
4136
- /**
4137
- * A pinned issuer key the device trusts for offline OAC verification.
4138
- * Sourced from the backend Trust Bundle (`GET /v1/issuer/keys`) and cached
4139
- * on-device. `notBeforeMs` / `notAfterMs` bound the key's own validity so a
4140
- * rotated-out key cannot be used to verify a freshly minted credential.
4141
- */
4142
- interface TrustedIssuerKey {
4143
- issuerId: string;
4144
- /** Issuer P-256 public key as SubjectPublicKeyInfo DER, base64. */
4145
- publicKeySpkiB64: string;
4146
- notBeforeMs?: number;
4147
- notAfterMs?: number;
4148
- }
4149
- /** Identity surfaced to the caller after a successful offline verify. */
4150
- interface OacOfflineIdentity {
4151
- oacId: string;
4152
- issuerId: string;
4153
- userId: string;
4154
- phoneE164: string;
4155
- displayName: string;
4156
- /** Holder's bound device key; lets the caller verify receipts offline. */
4157
- devicePubkeySpkiB64: string;
4158
- }
4159
- type VerifyOacOfflineResult = {
4160
- ok: true;
4161
- oac: ConsumerOAC;
4162
- identity: OacOfflineIdentity;
4163
- } | {
4164
- ok: false;
4165
- reason: 'malformed' | 'untrusted_issuer' | 'signature_invalid' | 'window_too_long' | 'not_yet_valid' | 'expired';
4166
- };
4167
- interface VerifyOacOfflineOptions {
4168
- /** Override the wall clock; defaults to `Date.now()`. */
4169
- nowMs?: number;
4170
- }
4171
- /** Canonical OAC payload (domain-bound) the backend issuer signs. */
4172
- declare function consumerOacSigningPayload(oac: ConsumerOAC): {
4173
- phoneE164: string;
4174
- userId: string;
4175
- deviceId: string;
4176
- displayName: string;
4177
- currency: string;
4178
- perTxCapKobo: number;
4179
- cumulativeCapKobo: number;
4180
- validFromMs: number;
4181
- validUntilMs: number;
4182
- counterSeed: number;
4183
- issuedAtMs: number;
4184
- issuerId: string;
4185
- alg: "p256";
4186
- oacId: string;
4187
- devicePubkeySpkiB64: string;
4188
- domain: "flur:consumer-offline:v1:oac";
4189
- };
4190
- /**
4191
- * Verify a signed OAC offline against a pinned set of trusted issuer keys.
4192
- *
4193
- * Security invariants:
4194
- * - The signature is checked against the PINNED key for `oac.issuerId`,
4195
- * never the credential-embedded `issuerPublicKeySpkiB64`. An attacker who
4196
- * forges an OAC with their own key (and a matching embedded key) fails
4197
- * because their key is not pinned.
4198
- * - The pinned key's own validity window is enforced.
4199
- * - The OAC validity window is enforced (`validFromMs <= now < validUntilMs`).
4200
- */
4201
- declare function verifyOacOffline(signed: SignedConsumerOAC, trustedKeys: readonly TrustedIssuerKey[], options?: VerifyOacOfflineOptions): VerifyOacOfflineResult;
4202
- /**
4203
- * QR prefix for a presented unified OAC. A holder shows this QR to be paid
4204
- * and/or identified offline; the scanner decodes it and calls
4205
- * `verifyOacOffline` against its pinned trust bundle. Distinct from the
4206
- * settlement-receipt (`FLURSR1.`) and pay-card prefixes so the scanner can
4207
- * dispatch by prefix without ambiguity.
4208
- */
4209
- declare const CONSUMER_OAC_QR_PREFIX: "FLUROAC1.";
4210
- /** True iff `value` looks like a presented OAC QR payload. */
4211
- declare function isConsumerOacQR(value: string): boolean;
4212
- /**
4213
- * Advisory "pay me" request a holder may attach to a presented OAC pay code:
4214
- * an amount, a purpose/intent, and a free-text reference. This rides as an
4215
- * UNSIGNED suffix on the QR (see {@link encodeConsumerOacQR}) — it is never
4216
- * part of the issuer-signed credential and carries no authority. The payer's
4217
- * app treats it purely as a prefill hint and always confirms the amount,
4218
- * exactly as with a NIBSS dynamic QR.
4219
- */
4220
- declare const OacPresentmentRequestSchema: z.ZodObject<{
4221
- /** Requested amount in minor units (kobo). */
4222
- amountMinor: z.ZodOptional<z.ZodNumber>;
4223
- /** Purpose/intent code (mirrors the NIBSS intent vocabulary). */
4224
- intent: z.ZodOptional<z.ZodString>;
4225
- /** Free-text reference / note. */
4226
- reference: z.ZodOptional<z.ZodString>;
4227
- }, "strict", z.ZodTypeAny, {
4228
- amountMinor?: number | undefined;
4229
- reference?: string | undefined;
4230
- intent?: string | undefined;
4231
- }, {
4232
- amountMinor?: number | undefined;
4233
- reference?: string | undefined;
4234
- intent?: string | undefined;
4235
- }>;
4236
- type OacPresentmentRequest = z.infer<typeof OacPresentmentRequestSchema>;
4237
- /**
4238
- * Encode a signed OAC as a scannable QR payload. The envelope is validated
4239
- * before encoding so a malformed credential can never be presented.
4240
- *
4241
- * An optional advisory {@link OacPresentmentRequest} is appended as a
4242
- * dot-separated, base64url-encoded suffix:
4243
- * `FLUROAC1.<base64url(signed)>.<base64url(request)>`
4244
- * The signed segment is byte-identical with or without the suffix, so the
4245
- * credential's verifiability is unaffected. An empty request adds no suffix.
4246
- */
4247
- declare function encodeConsumerOacQR(signed: SignedConsumerOAC, request?: OacPresentmentRequest): string;
4248
- /**
4249
- * Decode (WITHOUT verifying) a presented OAC QR back into a signed envelope.
4250
- * Any advisory request suffix is ignored here — use
4251
- * {@link decodeConsumerOacRequest} to read it. The caller MUST pass the result
4252
- * to `verifyOacOffline` against pinned keys before trusting any field —
4253
- * decoding proves nothing about authenticity.
4254
- */
4255
- declare function decodeUnverifiedConsumerOacQR(value: string): SignedConsumerOAC;
4256
- /**
4257
- * Read the advisory {@link OacPresentmentRequest} from a presented OAC QR, or
4258
- * `null` if absent/malformed. This is purely a prefill hint and is NEVER
4259
- * authoritative — a malformed suffix is treated as "no request" and never
4260
- * throws, so a bad suffix can never block a verifiable credential.
4261
- */
4262
- declare function decodeConsumerOacRequest(value: string): OacPresentmentRequest | null;
4263
-
4264
4438
  /**
4265
4439
  * FLURA1 — single-SMS consumer-offline settle token.
4266
4440
  *
@@ -6671,4 +6845,4 @@ declare function createOfflinePaymentAuthorizationArtifactUri(input: {
6671
6845
  }>;
6672
6846
  };
6673
6847
 
6674
- export { ACCOUNT_FUNDED_OAC_MAX_TTL_MS, ACCOUNT_STATUSES, ACCOUNT_TYPES, ADDITIONAL_DATA_SUBFIELD, ARTIFACT_BODY_SCHEMAS, ARTIFACT_TYPES, type Account, type AccountActivityItem, type AccountMembership, AccountMembershipSchema, AccountSchema, type AccountStatus, type AccountSummaryResponse, type AccountType, type AccountsClient, type AccountsClientOptions, type AddMemberInput, type AdditionalData, type ApiCredentialPublic, ApiCredentialPublicSchema, type ApiCredentialsAdminClient, type ArtifactBody, type ArtifactHeader, ArtifactHeaderSchema, type ArtifactType, type AtomicRedeemReceiptInput, type AtomicRedeemResponse, type AttestationSecurityLevel, AttestationSecurityLevelSchema, type AuthLogoutInput, type AuthRefreshInput, type AuthRefreshResponse, type AuthorizeSendWithBiometricInput, type AuthorizedOptions, type BiometricSigner, type BuildPassInput, type BuildReceiptInput, type BuildRedemptionInput, CLAIM_DOMAIN_V2, COLLECTION_INTENT_STATUSES, COLLECTION_PAYMENT_STATUSES, CONSUMER_OAC_DOMAIN, CONSUMER_OAC_QR_PREFIX, CONSUMER_OFFLINE_CLAIM_SUBMIT_GRACE_MS, CONSUMER_PAYMENT_REQUEST_DOMAIN, CONSUMER_SETTLEMENT_DOMAIN, CONSUMER_SETTLEMENT_RECEIPT_QR_PREFIX, CUSTODIAL_MODES, type CanonicalClaimInput, type CashNamespace, type ClaimSignature, type CollectionIntent, CollectionIntentSchema, type CollectionPayment, type CollectionPaymentResult, CollectionPaymentResultSchema, CollectionPaymentSchema, type CollectionReportSummary, CollectionReportSummarySchema, type CollectionStatement, CollectionStatementSchema, type CollectionsClient, type CollectionsClientOptions, type ConsumerCollectionsClient, type ConsumerOAC, type OACRecord as ConsumerOACRecord, OACRecordSchema as ConsumerOACRecordSchema, ConsumerOACSchema, type ConsumerPaymentClaim, ConsumerPaymentClaimSchema, type ConsumerPaymentRequestEnvelope, ConsumerPaymentRequestEnvelopeSchema, type ConsumerSettleResult, ConsumerSettleResultSchema, type ConsumerSettlement, ConsumerSettlementSchema, type ConsumerWithdrawalsClient, type ConsumerWithdrawalsClientOptions, type CreateBusinessAccountInput, type CreateCollectionIntentInput, CreateCollectionIntentInputSchema, type CreatePayLinkResponse, type CreatePayoutDestinationInput, CreatePayoutDestinationInputSchema, type CreatePayoutInput, CreatePayoutInputSchema, type CreateTransferOptions, type CreateWithdrawalInput, CreateWithdrawalInputSchema, type CreateWithdrawalResult, CreateWithdrawalResultSchema, type CustodialMode, type DecodedArtifactUri, type DecodedOfflineSmsSettleToken, type DeviceKeyAlg, DeviceKeyAlgSchema, type DeviceKeyRecord, DeviceKeyRecordSchema, type DeviceTrustState, FIELD, FLUR_ARTIFACT_URI_PREFIX, FLUR_ARTIFACT_URI_SCHEME, FLUR_ARTIFACT_VERSION, FlurApiError, FlurArtifactError, FlurCapExceededError, FlurClient, type FlurClientOptions, FlurError, type FlurErrorCode, FlurExpiredError, type FlurHandle, type FlurInitOptions, type FlurOfflineSettlementsClient, type FlurPartnerClient, type FlurPaymentEvent, FlurReplayError, HARDENED_ARTIFACT_TYPES, type HmacFetchOptions, IdentityArtifactSchema, type IngestFundingResult, IngestFundingResultSchema, type IssueAccountOacInput, IssueAccountOacInputSchema, type IssueOfflineTokenInput, type IssuePassInput, type IssueReceiptInput, type IssuerTrustBundle, IssuerTrustBundleSchema, type IssuerTrustKey, IssuerTrustKeySchema, LedgerJournalEntryArtifactSchema, type ListPassesInput, type ListPassesResponse, type ListPayoutDestinationsResult, ListPayoutDestinationsResultSchema, type ListReceiptsInput, type ListReceiptsResponse, type ListTransactionsOptions, MEMBERSHIP_ROLES, MERCHANT_PAYOUT_STATUSES, MERCHANT_PROFILE_STATUSES, type MeOfflineClient, type MeOfflineClientOptions, type MembershipRole, type MerchantAccountInfo, type MerchantPayout, MerchantPayoutSchema, type MerchantProfile, MerchantProfileSchema, type MintedApiCredential, MintedApiCredentialSchema, type Money, NGN_CURRENCY_CODE, NG_COUNTRY_CODE, NQRParseError, type NQRPayloadInput, NqrPaymentRequestArtifactSchema, type OAC, OACSchema, OAC_DEFAULT_CUMULATIVE_KOBO, OAC_DEFAULT_PER_TX_KOBO, OAC_DEFAULT_VALIDITY_MS, OFFLINE_CLAIM_SMS_PREFIX, OFFLINE_SMS_SETTLE_DOMAIN, OFFLINE_SMS_SETTLE_HEADER_BYTES, OFFLINE_SMS_SETTLE_PREFIX, OFFLINE_SMS_SETTLE_SIGNATURE_BYTES, OFFLINE_SMS_SETTLE_TOKEN_BYTES, OFFLINE_SMS_SETTLE_VERSION, type OacOfflineIdentity, type OacPresentmentRequest, OacPresentmentRequestSchema, type OfflineClaimAlgorithm, OfflineClaimArtifactSchema, type OfflineClaimSigner, type OfflinePaymentAuthorization, type OfflinePaymentAuthorizationArtifact, OfflinePaymentAuthorizationArtifactSchema, OfflinePaymentAuthorizationSchema, type OfflinePaymentRequest, OfflinePaymentRequestSchema, type OfflineSmsSettleInput, type OfflineSmsSettleSigner, type OfflineStatusResult, OfflineStatusResultSchema, type OfflineToken, OfflineTokenSchema, type OnboardingCompleteInput, type OnboardingCompleteResponse, type OnboardingFallback, type OnboardingRiskReason, type OnboardingStartInput, type OnboardingStartResponse, type P256EnrollmentChallengeInput, P256EnrollmentChallengeInputSchema, type P256EnrollmentChallengeResult, P256EnrollmentChallengeResultSchema, PARTNER_FUNDING_DIRECTIONS, PARTNER_FUNDING_STATUSES, PARTNER_KINDS, PARTNER_PROFILE_STATUSES, PARTNER_SCOPES, PASS_KINDS, PASS_STATES, PAYLOAD_FORMAT_INDICATOR_VALUE, PAYOUT_DESTINATION_STATUSES, POINT_OF_INITIATION, type ParsedNQR, type PartnerClientOptions, type PartnerCollectionsClient, type PartnerFunding, type PartnerFundingClient, type PartnerFundingDirection, type PartnerFundingEventInput, PartnerFundingEventInputSchema, PartnerFundingSchema, type PartnerFundingStatus, type PartnerKind, type PartnerProfile, type PartnerProfileAdminClient, type PartnerProfileAdminClientOptions, PartnerProfileSchema, type PartnerProfileStatus, type PartnerScope, type PartnerSignResult, type Pass, PassArtifactSchema, type PassKind, type PassMetadata, PassMetadataSchema, PassSchema, type PassState, type PassesClient, type PassesClientOptions, type PayCollectionInput, PayCollectionInputSchema, type PayCollectionOptions, type PayCollectionResponse, type PaymentClaim, PaymentClaimSchema, PaymentIntentArtifactSchema, type PayoutDestination, PayoutDestinationSchema, type PayoutDestinationStatus, type PayoutEventInput, PayoutEventInputSchema, type PinSetInput, type PinVerifyInput, type ProviderEventInput, ProviderEventInputSchema, type ProviderEventRecord, ProviderEventRecordSchema, type PublicCollectionIntent, PublicCollectionIntentSchema, type PushPlatform, type PushRegisterInput, RECEIPT_CHANNELS, RECEIPT_KINDS, REPLAY_WINDOW_MS, type Receipt, type ReceiptArtifact, ReceiptArtifactSchema, type ReceiptChannel, type ReceiptKind, type ReceiptPayload, ReceiptPayloadSchema, ReceiptSchema, type ReceiptsClient, type ReceiptsClientOptions, type RecipientResolveInput, type RecipientResolveResponse, type ReconciliationReport, ReconciliationReportSchema, type RecordPayoutEventResult, RecordPayoutEventResultSchema, type RedeemPassResponse, type Redemption, RedemptionSchema, type RegisterDeviceInput, type RegisterDeviceKeyP256Input, RegisterDeviceKeyP256InputSchema, type RegisterDeviceResponse, type RegisterSendDeviceKeyInput, type ResolveCollectionOptions, type ResolveCollectionResponse, type ResolvePayLinkResponse, ReversalRecordArtifactSchema, RevokeDeviceKeyInputSchema, type RevokePassInput, type RoutingHint, SETTLEMENT_SCHEDULES, type SendChallengeInput, type SendChallengeResponse, type SendMoneyInput, type SendMoneyOptions, type SendVerifyInput, type SendVerifyResponse, type SettleResponse, SettleResponseSchema, type Settlement, SettlementRecordArtifactSchema, SettlementSchema, type SignedArtifact, type SignedConsumerOAC, SignedConsumerOACSchema, type SignerPublicKey, StatementArtifactSchema, type SubscribeOptions, type TLVField, type TransactionDetailResponse, type TransactionDirection, type TransactionsListResponse, type TransferInput, type TransferResponse, type TransferStatus, type TrustedIssuerKey, type UnsignedConsumerPaymentRequest, type UnsignedOAC, type UnsignedOfflinePaymentAuthorization, type UnsignedOfflinePaymentRequest, type UnsignedPass, type UnsignedReceipt, type UnsignedRedemption, type UpsertMerchantProfileInput, UpsertMerchantProfileInputSchema, type UpsertPartnerProfileInput, UpsertPartnerProfileInputSchema, type VerifiedArtifact, type VerifyArtifactOptions, type VerifyClaimSignatureInput, type VerifyOacOfflineOptions, type VerifyOacOfflineResult, WITHDRAWAL_STATES, type Withdrawal, WithdrawalSchema, type WithdrawalState, base64UrlDecode, base64UrlEncode, bodySha256Hex, buildArtifactBody, buildAuthorization, buildConsumerPaymentRequest, buildOAC, buildPass, buildPaymentRequest, buildReceipt, buildRedemption, buildSmsSettleHeader, domainTag as buildSmsSettleSignedBytes, canonicalClaimSigningBytes, canonicalClaimSigningPayload, canonicalJSONBytes, canonicalJSONStringify, canonicalRequestString, computeConsumerClaimEncounterId, computeEncounterId, constantTimeEqual, consumerOacSigningPayload, consumerPaymentRequestSigningBytes, consumerPaymentRequestSigningPayload, consumerSettlementSigningPayload, crc16ccitt, crc16ccittHex, createAccountsClient, createApiCredentialsAdminClient, createArtifactUri, createCollectionsClient, createConsumerCollectionsClient, createConsumerWithdrawalsClient, createFlurPartnerClient, createHmacFetch, createMeOfflineClient, createOfflinePaymentAuthorizationArtifactUri, createOfflineSettlementsClient, createPartnerCollectionsClient, createPartnerFundingClient, createPartnerProfileAdminClient, createPassesClient, createReceiptArtifactUri, createReceiptsClient, createSoftwareP256Signer, decodeArtifactUri, decodeAuthorizationQR, decodeBase45, decodeConsumerOacRequest, decodeConsumerSettlementReceiptQR, decodeOfflineClaimSmsMessage, decodeOfflineSmsSettleToken, decodePaymentRequestQR, decodeUnverifiedConsumerOacQR, decodeUnverifiedConsumerSettlementReceiptQR, derToRawP256Signature, encodeArtifactUri, encodeAuthorizationQR, encodeBase45, encodeConsumerOacQR, encodeConsumerSettlementReceiptQR, encodeNQR, encodeOfflineClaimSmsMessage, encodeOfflineSmsSettleToken, encodePaymentRequestQR, extractOfflineClaimSmsToken, extractOfflineSmsSettleToken, formatAmount, generateDynamicQR, generateStaticQR, init, isConsumerOacQR, isConsumerPaymentRequestExpired, isHardenedArtifactType, isKnownArtifactType, isPassWithinValidity, moneyMinorToNumber, normalizeE164, parseAmountInput, parseNQR, parseQR, readTLV, routingHint, signArtifact, signAuthorization, signConsumerPaymentRequest, signOAC, signPartnerRequest, signPass, signPaymentRequest, signReceipt, signRedemption, signRequestHMAC, verifyArtifactSignature, verifyArtifactUri, verifyAuthorization, verifyClaimSignature, verifyConsumerPaymentRequest, verifyConsumerSettlement, verifyConsumerSettlementReceiptQR, verifyOAC, verifyOacOffline, verifyOfflineSmsSettleToken, verifyPass, verifyPaymentRequest, verifyReceipt, verifyRedemption, verifyRequestHMAC, writeTLV };
6848
+ export { ACCOUNT_FUNDED_OAC_MAX_TTL_MS, ACCOUNT_STATUSES, ACCOUNT_TYPES, ADDITIONAL_DATA_SUBFIELD, ARTIFACT_BODY_SCHEMAS, ARTIFACT_TYPES, type Account, type AccountActivityItem, type AccountMembership, AccountMembershipSchema, AccountSchema, type AccountStatus, type AccountSummaryResponse, type AccountType, type AccountsClient, type AccountsClientOptions, type AddMemberInput, type AdditionalData, type ApiCredentialPublic, ApiCredentialPublicSchema, type ApiCredentialsAdminClient, type ArtifactBody, type ArtifactHeader, ArtifactHeaderSchema, type ArtifactType, type AtomicRedeemReceiptInput, type AtomicRedeemResponse, type AttestationSecurityLevel, AttestationSecurityLevelSchema, type AuthLogoutInput, type AuthRefreshInput, type AuthRefreshResponse, type AuthorizeSendWithBiometricInput, type AuthorizedOptions, type BiometricSigner, type BuildPassInput, type BuildReceiptInput, type BuildRedemptionInput, CLAIM_DOMAIN_V2, COLLECTION_INTENT_STATUSES, COLLECTION_PAYMENT_STATUSES, CONSUMER_OAC_DOMAIN, CONSUMER_OAC_QR_PREFIX, CONSUMER_OFFLINE_CLAIM_SUBMIT_GRACE_MS, CONSUMER_PAYMENT_REQUEST_DOMAIN, CONSUMER_REVOCATION_DOMAIN, CONSUMER_SETTLEMENT_DOMAIN, CONSUMER_SETTLEMENT_RECEIPT_QR_PREFIX, CUSTODIAL_MODES, type CanonicalClaimInput, type CashNamespace, type ClaimSignature, type CollectionIntent, CollectionIntentSchema, type CollectionPayment, type CollectionPaymentResult, CollectionPaymentResultSchema, CollectionPaymentSchema, type CollectionReportSummary, CollectionReportSummarySchema, type CollectionStatement, CollectionStatementSchema, type CollectionsClient, type CollectionsClientOptions, type ConsumerCollectionsClient, type ConsumerOAC, type OACRecord as ConsumerOACRecord, OACRecordSchema as ConsumerOACRecordSchema, ConsumerOACSchema, type ConsumerPaymentClaim, ConsumerPaymentClaimSchema, type ConsumerPaymentRequestEnvelope, ConsumerPaymentRequestEnvelopeSchema, type ConsumerSettleResult, ConsumerSettleResultSchema, type ConsumerSettlement, ConsumerSettlementSchema, type ConsumerWithdrawalsClient, type ConsumerWithdrawalsClientOptions, type CreateBusinessAccountInput, type CreateCollectionIntentInput, CreateCollectionIntentInputSchema, type CreatePayLinkResponse, type CreatePayoutDestinationInput, CreatePayoutDestinationInputSchema, type CreatePayoutInput, CreatePayoutInputSchema, type CreateTransferOptions, type CreateWithdrawalInput, CreateWithdrawalInputSchema, type CreateWithdrawalResult, CreateWithdrawalResultSchema, type CustodialMode, type DecodedArtifactUri, type DecodedOfflineSmsSettleToken, type DeviceKeyAlg, DeviceKeyAlgSchema, type DeviceKeyRecord, DeviceKeyRecordSchema, type DeviceTrustState, FIELD, FLUR_ARTIFACT_URI_PREFIX, FLUR_ARTIFACT_URI_SCHEME, FLUR_ARTIFACT_VERSION, FlurApiError, FlurArtifactError, FlurCapExceededError, FlurClient, type FlurClientOptions, FlurError, type FlurErrorCode, FlurExpiredError, type FlurHandle, type FlurInitOptions, type FlurOfflineSettlementsClient, type FlurPartnerClient, type FlurPaymentEvent, FlurReplayError, HARDENED_ARTIFACT_TYPES, type HmacFetchOptions, IdentityArtifactSchema, type IngestFundingResult, IngestFundingResultSchema, type IssueAccountOacInput, IssueAccountOacInputSchema, type IssueOfflineTokenInput, type IssuePassInput, type IssueReceiptInput, type IssuerTrustBundle, IssuerTrustBundleSchema, type IssuerTrustKey, IssuerTrustKeySchema, LedgerJournalEntryArtifactSchema, type ListPassesInput, type ListPassesResponse, type ListPayoutDestinationsResult, ListPayoutDestinationsResultSchema, type ListReceiptsInput, type ListReceiptsResponse, type ListTransactionsOptions, MEMBERSHIP_ROLES, MERCHANT_PAYOUT_STATUSES, MERCHANT_PROFILE_STATUSES, type MeOfflineClient, type MeOfflineClientOptions, type MembershipRole, type MerchantAccountInfo, type MerchantPayout, MerchantPayoutSchema, type MerchantProfile, MerchantProfileSchema, type MintedApiCredential, MintedApiCredentialSchema, type Money, NGN_CURRENCY_CODE, NG_COUNTRY_CODE, NQRParseError, type NQRPayloadInput, NqrPaymentRequestArtifactSchema, type OAC, OACSchema, OAC_DEFAULT_CUMULATIVE_KOBO, OAC_DEFAULT_PER_TX_KOBO, OAC_DEFAULT_VALIDITY_MS, OFFLINE_CLAIM_SMS_PREFIX, OFFLINE_SMS_SETTLE_DOMAIN, OFFLINE_SMS_SETTLE_HEADER_BYTES, OFFLINE_SMS_SETTLE_PREFIX, OFFLINE_SMS_SETTLE_SIGNATURE_BYTES, OFFLINE_SMS_SETTLE_TOKEN_BYTES, OFFLINE_SMS_SETTLE_VERSION, type OacOfflineIdentity, type OacPresentmentRequest, OacPresentmentRequestSchema, type OfflineClaimAlgorithm, OfflineClaimArtifactSchema, type OfflineClaimSigner, type OfflinePaymentAuthorization, type OfflinePaymentAuthorizationArtifact, OfflinePaymentAuthorizationArtifactSchema, OfflinePaymentAuthorizationSchema, type OfflinePaymentRequest, OfflinePaymentRequestSchema, type OfflineSmsSettleInput, type OfflineSmsSettleSigner, type OfflineStatusResult, OfflineStatusResultSchema, type OfflineToken, OfflineTokenSchema, type OnboardingCompleteInput, type OnboardingCompleteResponse, type OnboardingFallback, type OnboardingRiskReason, type OnboardingStartInput, type OnboardingStartResponse, type P256EnrollmentChallengeInput, P256EnrollmentChallengeInputSchema, type P256EnrollmentChallengeResult, P256EnrollmentChallengeResultSchema, PARTNER_FUNDING_DIRECTIONS, PARTNER_FUNDING_STATUSES, PARTNER_KINDS, PARTNER_PROFILE_STATUSES, PARTNER_SCOPES, PASS_KINDS, PASS_STATES, PAYLOAD_FORMAT_INDICATOR_VALUE, PAYOUT_DESTINATION_STATUSES, POINT_OF_INITIATION, type ParsedNQR, type PartnerClientOptions, type PartnerCollectionsClient, type PartnerFunding, type PartnerFundingClient, type PartnerFundingDirection, type PartnerFundingEventInput, PartnerFundingEventInputSchema, PartnerFundingSchema, type PartnerFundingStatus, type PartnerKind, type PartnerProfile, type PartnerProfileAdminClient, type PartnerProfileAdminClientOptions, PartnerProfileSchema, type PartnerProfileStatus, type PartnerScope, type PartnerSignResult, type Pass, PassArtifactSchema, type PassKind, type PassMetadata, PassMetadataSchema, PassSchema, type PassState, type PassesClient, type PassesClientOptions, type PayCollectionInput, PayCollectionInputSchema, type PayCollectionOptions, type PayCollectionResponse, type PaymentClaim, PaymentClaimSchema, PaymentIntentArtifactSchema, type PayoutDestination, PayoutDestinationSchema, type PayoutDestinationStatus, type PayoutEventInput, PayoutEventInputSchema, type PinSetInput, type PinVerifyInput, type ProviderEventInput, ProviderEventInputSchema, type ProviderEventRecord, ProviderEventRecordSchema, type PublicCollectionIntent, PublicCollectionIntentSchema, type PushPlatform, type PushRegisterInput, RECEIPT_CHANNELS, RECEIPT_KINDS, REPLAY_WINDOW_MS, REVOCATION_LIST_MAX_ENTRIES, type Receipt, type ReceiptArtifact, ReceiptArtifactSchema, type ReceiptChannel, type ReceiptKind, type ReceiptPayload, ReceiptPayloadSchema, ReceiptSchema, type ReceiptsClient, type ReceiptsClientOptions, type RecipientResolveInput, type RecipientResolveResponse, type ReconciliationReport, ReconciliationReportSchema, type RecordPayoutEventResult, RecordPayoutEventResultSchema, type RedeemPassResponse, type Redemption, RedemptionSchema, type RegisterDeviceInput, type RegisterDeviceKeyP256Input, RegisterDeviceKeyP256InputSchema, type RegisterDeviceResponse, type RegisterSendDeviceKeyInput, type ResolveCollectionOptions, type ResolveCollectionResponse, type ResolvePayLinkResponse, ReversalRecordArtifactSchema, type RevocationList, RevocationListSchema, RevokeDeviceKeyInputSchema, type RevokePassInput, type RoutingHint, SETTLEMENT_SCHEDULES, type SendChallengeInput, type SendChallengeResponse, type SendMoneyInput, type SendMoneyOptions, type SendVerifyInput, type SendVerifyResponse, type SettleResponse, SettleResponseSchema, type Settlement, SettlementRecordArtifactSchema, SettlementSchema, type SignedArtifact, type SignedConsumerOAC, SignedConsumerOACSchema, type SignedRevocationList, SignedRevocationListSchema, type SignerPublicKey, StatementArtifactSchema, type SubscribeOptions, type TLVField, type TransactionDetailResponse, type TransactionDirection, type TransactionsListResponse, type TransferInput, type TransferResponse, type TransferStatus, type TrustedIssuerKey, type UnsignedConsumerPaymentRequest, type UnsignedOAC, type UnsignedOfflinePaymentAuthorization, type UnsignedOfflinePaymentRequest, type UnsignedPass, type UnsignedReceipt, type UnsignedRedemption, type UpsertMerchantProfileInput, UpsertMerchantProfileInputSchema, type UpsertPartnerProfileInput, UpsertPartnerProfileInputSchema, type VerifiedArtifact, type VerifyArtifactOptions, type VerifyClaimSignatureInput, type VerifyOacOfflineOptions, type VerifyOacOfflineResult, type VerifyRevocationListOptions, type VerifyRevocationListResult, WITHDRAWAL_STATES, type Withdrawal, WithdrawalSchema, type WithdrawalState, base64UrlDecode, base64UrlEncode, bodySha256Hex, buildArtifactBody, buildAuthorization, buildConsumerPaymentRequest, buildOAC, buildPass, buildPaymentRequest, buildReceipt, buildRedemption, buildSmsSettleHeader, domainTag as buildSmsSettleSignedBytes, canonicalClaimSigningBytes, canonicalClaimSigningPayload, canonicalJSONBytes, canonicalJSONStringify, canonicalRequestString, computeConsumerClaimEncounterId, computeEncounterId, constantTimeEqual, consumerOacSigningPayload, consumerPaymentRequestSigningBytes, consumerPaymentRequestSigningPayload, consumerSettlementSigningPayload, crc16ccitt, crc16ccittHex, createAccountsClient, createApiCredentialsAdminClient, createArtifactUri, createCollectionsClient, createConsumerCollectionsClient, createConsumerWithdrawalsClient, createFlurPartnerClient, createHmacFetch, createMeOfflineClient, createOfflinePaymentAuthorizationArtifactUri, createOfflineSettlementsClient, createPartnerCollectionsClient, createPartnerFundingClient, createPartnerProfileAdminClient, createPassesClient, createReceiptArtifactUri, createReceiptsClient, createSoftwareP256Signer, decodeArtifactUri, decodeAuthorizationQR, decodeBase45, decodeConsumerOacRequest, decodeConsumerSettlementReceiptQR, decodeOfflineClaimSmsMessage, decodeOfflineSmsSettleToken, decodePaymentRequestQR, decodeUnverifiedConsumerOacQR, decodeUnverifiedConsumerSettlementReceiptQR, derToRawP256Signature, encodeArtifactUri, encodeAuthorizationQR, encodeBase45, encodeConsumerOacQR, encodeConsumerSettlementReceiptQR, encodeNQR, encodeOfflineClaimSmsMessage, encodeOfflineSmsSettleToken, encodePaymentRequestQR, extractOfflineClaimSmsToken, extractOfflineSmsSettleToken, formatAmount, generateDynamicQR, generateStaticQR, init, isConsumerOacQR, isConsumerPaymentRequestExpired, isHardenedArtifactType, isKnownArtifactType, isOacRevoked, isPassWithinValidity, moneyMinorToNumber, normalizeE164, parseAmountInput, parseNQR, parseQR, readTLV, revocationListSigningPayload, routingHint, signArtifact, signAuthorization, signConsumerPaymentRequest, signOAC, signPartnerRequest, signPass, signPaymentRequest, signReceipt, signRedemption, signRequestHMAC, verifyArtifactSignature, verifyArtifactUri, verifyAuthorization, verifyClaimSignature, verifyConsumerPaymentRequest, verifyConsumerSettlement, verifyConsumerSettlementReceiptQR, verifyOAC, verifyOacOffline, verifyOfflineSmsSettleToken, verifyPass, verifyPaymentRequest, verifyReceipt, verifyRedemption, verifyRequestHMAC, verifyRevocationList, writeTLV };