Skip to content

Commit 0d7fd82

Browse files
authored
Merge pull request #17 from sysdevrun/claude/fix-extension-id-verification-wHgBj
Allow custom extension ID for Intercode issuing (e.g. +FRII1)
2 parents de564b2 + af13d95 commit 0d7fd82

5 files changed

Lines changed: 10 additions & 2 deletions

File tree

src/decoder.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,9 @@ function decodeIssuingDetail(iss: any): IssuingDetail {
283283
const ext = iss.extension;
284284
if (isIntercodeIssuingExtension(ext.extensionId)) {
285285
try {
286-
result.intercodeIssuing = getIntercodeIssuingCodec().decode(ext.extensionData) as IntercodeIssuingData;
286+
const decoded = getIntercodeIssuingCodec().decode(ext.extensionData) as IntercodeIssuingData;
287+
decoded.extensionId = ext.extensionId;
288+
result.intercodeIssuing = decoded;
287289
} catch {
288290
result.extension = { extensionId: ext.extensionId, extensionData: ext.extensionData };
289291
}

src/encoder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ function encodeRailTicket(fcbVersion: number, input: UicBarcodeTicketInput): Uin
171171
productRetailer: iss.intercodeIssuing.productRetailer,
172172
});
173173
extension = {
174-
extensionId: `_${rics}II1`,
174+
extensionId: iss.intercodeIssuing.extensionId ?? `_${rics}II1`,
175175
extensionData: issuingBytes,
176176
};
177177
}

src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ export interface ProductRetailerData {
151151
}
152152

153153
export interface IntercodeIssuingData {
154+
/** Original extension ID string (e.g. "_3703II1" or "+FRII1"). */
155+
extensionId: string;
154156
intercodeVersion: number;
155157
intercodeInstanciation: number;
156158
networkId: Uint8Array;
@@ -362,6 +364,8 @@ export interface IssuingDetailInput {
362364
}
363365

364366
export interface IntercodeIssuingDataInput {
367+
/** Override the generated extension ID (e.g. "+FRII1"). When omitted, defaults to `_<RICS>II1`. */
368+
extensionId?: string;
365369
intercodeVersion?: number;
366370
intercodeInstanciation?: number;
367371
networkId: Uint8Array;

tests/signer.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ function decodedToInput(hex: string): UicBarcodeTicketInput {
6060
issuerPNR: rt.issuingDetail?.issuerPNR,
6161
intercodeIssuing: rt.issuingDetail?.intercodeIssuing
6262
? {
63+
extensionId: rt.issuingDetail.intercodeIssuing.extensionId,
6364
intercodeVersion: rt.issuingDetail.intercodeIssuing.intercodeVersion,
6465
intercodeInstanciation: rt.issuingDetail.intercodeIssuing.intercodeInstanciation,
6566
networkId: rt.issuingDetail.intercodeIssuing.networkId,

website/src/lib/convert.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export function ticketToInput(ticket: UicBarcodeTicket): UicBarcodeTicketInput {
4343
if (iss?.intercodeIssuing) {
4444
const ic = iss.intercodeIssuing;
4545
const intercodeIssuing: IntercodeIssuingDataInput = {
46+
extensionId: ic.extensionId,
4647
intercodeVersion: ic.intercodeVersion,
4748
intercodeInstanciation: ic.intercodeInstanciation,
4849
networkId: ic.networkId,

0 commit comments

Comments
 (0)