Comparing version 0.48.4 to 0.49.0
@@ -8,2 +8,7 @@ # Changelog | ||
## [Unreleased] | ||
## [0.49.0] - 2023-01-31 | ||
## Added | ||
- Updated types in schema | ||
- Added `getPinKey` and `changePINEncrypted` methods to `Card` module | ||
## [0.48.0] - 2022-09-16 | ||
@@ -10,0 +15,0 @@ ## Added |
@@ -1,2 +0,2 @@ | ||
import { Card as CardModel, CardSettings, MutationActivateCardArgs, MutationChangeCardPinArgs, MutationChangeCardStatusArgs, MutationConfirmChangeCardPinArgs, MutationCreateCardArgs, MutationReorderCardArgs, MutationReplaceCardArgs, MutationUpdateCardSettingsArgs, GooglePayCardToken, MutationAddGooglePayCardTokenArgs, MutationDeleteGooglePayCardTokenArgs, WhitelistCardResponse, ConfirmFraudResponse } from "./schema"; | ||
import { Card as CardModel, CardSettings, MutationActivateCardArgs, MutationChangeCardPinArgs, MutationChangeCardStatusArgs, MutationConfirmChangeCardPinArgs, MutationCreateCardArgs, MutationReorderCardArgs, MutationReplaceCardArgs, MutationUpdateCardSettingsArgs, GooglePayCardToken, MutationAddGooglePayCardTokenArgs, MutationDeleteGooglePayCardTokenArgs, WhitelistCardResponse, ConfirmFraudResponse, CardPinKey, MutationChangeCardPinEncryptedArgs } from "./schema"; | ||
import { Model } from "./model"; | ||
@@ -46,2 +46,16 @@ import { ResultPage } from "./resultPage"; | ||
/** | ||
* Returns PIN key of a card to use during encrypted PIN change | ||
* | ||
* @param args query parameters including card id and / or type | ||
* @returns PIN key of the card | ||
*/ | ||
getPinKey(args: GetCardOptions): Promise<CardPinKey | null>; | ||
/** | ||
* Encrypted change PIN number for a given card | ||
* | ||
* @param args query parameters including card id and encrypted PIN number | ||
* @returns updated card details | ||
*/ | ||
changePINEncrypted(args: MutationChangeCardPinEncryptedArgs): Promise<CardModel>; | ||
/** | ||
* Initiates a change of PIN number for a given card | ||
@@ -48,0 +62,0 @@ * |
@@ -62,2 +62,4 @@ "use strict"; | ||
var GET_CARD_LIMITS = "\n query getCardLimits (\n $id: String,\n $type: CardType\n ) {\n viewer {\n mainAccount {\n card(\n filter: {\n id: $id,\n type: $type\n }\n ) {\n settings {\n cardPresentLimits {\n ".concat(CARD_LIMITS_FIELDS, "\n }\n cardNotPresentLimits {\n ").concat(CARD_LIMITS_FIELDS, "\n }\n }\n }\n }\n }\n }\n"); | ||
var GET_CARD_PIN_KEY = "\n query getCardPinKey (\n $id: String,\n $type: CardType\n ) {\n viewer {\n mainAccount {\n card(\n filter: {\n id: $id,\n type: $type\n }\n ) {\n pinKey {\n kid\n kty\n use\n alg\n n\n e\n }\n }\n }\n }\n }\n"; | ||
var CHANGE_CARD_PIN_ENCRYPTED = "mutation changeCardPINEncrypted(\n $id: String!\n $payload: ChangeCardPINEncryptedInput!\n) {\n changeCardPINEncrypted(\n id: $id\n payload: $payload\n ) {\n ".concat(CARD_FIELDS, "\n }\n}"); | ||
var CREATE_CARD = "mutation createCard(\n $type: CardType!,\n $cardHolderRepresentation: String\n) {\n createCard(\n type: $type,\n cardHolderRepresentation: $cardHolderRepresentation\n ) {\n ".concat(CARD_FIELDS, "\n }\n}"); | ||
@@ -184,2 +186,41 @@ var ACTIVATE_CARD = "mutation activateCard(\n $id: String!\n $verificationToken: String!\n) {\n activateCard(\n id: $id\n verificationToken: $verificationToken\n ) {\n ".concat(CARD_FIELDS, "\n }\n}"); | ||
/** | ||
* Returns PIN key of a card to use during encrypted PIN change | ||
* | ||
* @param args query parameters including card id and / or type | ||
* @returns PIN key of the card | ||
*/ | ||
Card.prototype.getPinKey = function (args) { | ||
var _a, _b, _c, _d; | ||
return __awaiter(this, void 0, void 0, function () { | ||
var result; | ||
return __generator(this, function (_e) { | ||
switch (_e.label) { | ||
case 0: return [4 /*yield*/, this.client.rawQuery(GET_CARD_PIN_KEY, args)]; | ||
case 1: | ||
result = _e.sent(); | ||
return [2 /*return*/, (_d = (_c = (_b = (_a = result.viewer) === null || _a === void 0 ? void 0 : _a.mainAccount) === null || _b === void 0 ? void 0 : _b.card) === null || _c === void 0 ? void 0 : _c.pinKey) !== null && _d !== void 0 ? _d : null]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Encrypted change PIN number for a given card | ||
* | ||
* @param args query parameters including card id and encrypted PIN number | ||
* @returns updated card details | ||
*/ | ||
Card.prototype.changePINEncrypted = function (args) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var result; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, this.client.rawQuery(CHANGE_CARD_PIN_ENCRYPTED, args)]; | ||
case 1: | ||
result = _a.sent(); | ||
return [2 /*return*/, result.changeCardPINEncrypted]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Initiates a change of PIN number for a given card | ||
@@ -310,3 +351,3 @@ * | ||
case 0: return [4 /*yield*/, this.client.rawQuery(exports.SET_CARD_HOLDER_REPRESENTATION, { | ||
cardHolderRepresentation: cardHolderRepresentation | ||
cardHolderRepresentation: cardHolderRepresentation, | ||
})]; | ||
@@ -313,0 +354,0 @@ case 1: |
@@ -209,3 +209,2 @@ "use strict"; | ||
(function (IntegrationType) { | ||
IntegrationType["Debitoor"] = "DEBITOOR"; | ||
IntegrationType["Fastbill"] = "FASTBILL"; | ||
@@ -212,0 +211,0 @@ IntegrationType["Lexoffice"] = "LEXOFFICE"; |
{ | ||
"name": "kontist", | ||
"version": "0.48.4", | ||
"version": "0.49.0", | ||
"description": "Kontist client SDK", | ||
@@ -5,0 +5,0 @@ "main": "dist/lib/index.js", |
@@ -25,3 +25,3 @@ import { expect } from "chai"; | ||
googlePayTokens: [], | ||
addedToApplePay: true | ||
addedToApplePay: true, | ||
}; | ||
@@ -52,2 +52,11 @@ | ||
const cardPinKeyData = { | ||
kid: "0dce6f4d-b5d0-4c7b-a7d8-cfe231a1f385", | ||
kty: "RSA", | ||
use: "enc", | ||
alg: "RS256", | ||
n: "ielfymjYSKEeeai7pFBhJrr0aR-B5_T0snVgQSm8K-SsFv3MFofkeWxWT3PCBId8kovdI-gfKabCyhuQDaYbXP1opyEkB9-gyG4zqmWoW9ddmWo-wxaW08KiruNl09IjWJR0w93tM0i8Pn2qpCSM3h0CdgfO9-VjLn1BpYFKjuJ1apZQ3TG1YYIfGSymghUl0JWLu0s5J2BrvEz91E0K4aF-VY4oSnlrTilq3FrCOgF8IopUvqJWIsz-hKagNAP1K4AXoSVX7Kc4MxUcZEIlkeMKj05YF3zoFhOzfQCa5kcYdPFNlEOpuZwuMidYw8LNBFdvV4VeKYUXZrvaW-SKUQ", | ||
e: "AQAB", | ||
}; | ||
describe("Card", () => { | ||
@@ -198,2 +207,73 @@ let sandbox: sinon.SinonSandbox; | ||
describe("#getPinKey", () => { | ||
it("should call rawQuery and return PIN key", async () => { | ||
// arrange | ||
const card = new Card(client.graphQL); | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
viewer: { | ||
mainAccount: { | ||
card: { | ||
pinKey: cardPinKeyData, | ||
}, | ||
}, | ||
}, | ||
} as any); | ||
// act | ||
const result = await card.getPinKey({ | ||
id: cardData.id, | ||
type: CardType.VisaBusinessDebit, | ||
}); | ||
// assert | ||
sinon.assert.calledOnce(spyOnRawQuery); | ||
expect(result).to.deep.eq(cardPinKeyData); | ||
}); | ||
it("should call rawQuery and return null for missing account", async () => { | ||
// arrange | ||
const card = new Card(client.graphQL); | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
viewer: {}, | ||
} as any); | ||
// act | ||
const result = await card.getPinKey({ | ||
id: cardData.id, | ||
type: CardType.MastercardBusinessDebit, | ||
}); | ||
// assert | ||
sinon.assert.calledOnce(spyOnRawQuery); | ||
expect(result).to.eq(null); | ||
}); | ||
}); | ||
describe("#changePINEncrypted", () => { | ||
it("should call rawQuery and return card details", async () => { | ||
// arrange | ||
const card = new Card(client.graphQL); | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
changeCardPINEncrypted: cardData, | ||
} as any); | ||
// act | ||
const result = await card.changePINEncrypted({ | ||
id: cardData.id, | ||
payload: { | ||
encryptedPin: | ||
"Web;7d2cf82ae5774e5293e4c020d2381217dcon;jVl14emA+OcyALb9F+CMFg==;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", | ||
keyId: "0dce6f4d-b5d0-4c7b-a7d8-cfe231a1f385", | ||
deviceId: "d3768ef3-b26b-4746-9ee0-94f527184830", | ||
signature: | ||
"3045022100ef4f8ede9999e1338a2af0ecd5c183c306fc1d134302895aa813bd0434b0a5d90220567e1c5d16d6be0f3a8553fcfdd765e8fefb169532fbf6932d96075358b46328", | ||
}, | ||
}); | ||
// assert | ||
sinon.assert.calledOnce(spyOnRawQuery); | ||
expect(result).to.eq(cardData); | ||
}); | ||
}); | ||
describe("#create", () => { | ||
@@ -342,7 +422,7 @@ it("should call rawQuery and return newly created card details", async () => { | ||
...cardData, | ||
status: CardStatus.Processing | ||
status: CardStatus.Processing, | ||
}; | ||
const card = new Card(client.graphQL); | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
replaceCard: newCardData | ||
replaceCard: newCardData, | ||
} as any); | ||
@@ -352,3 +432,3 @@ | ||
const result = await card.replace({ | ||
id: cardData.id | ||
id: cardData.id, | ||
}); | ||
@@ -367,7 +447,7 @@ | ||
...cardData, | ||
status: CardStatus.Processing | ||
status: CardStatus.Processing, | ||
}; | ||
const card = new Card(client.graphQL); | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
reorderCard: newCardData | ||
reorderCard: newCardData, | ||
} as any); | ||
@@ -377,3 +457,3 @@ | ||
const result = await card.reorder({ | ||
id: cardData.id | ||
id: cardData.id, | ||
}); | ||
@@ -393,11 +473,15 @@ | ||
const spyOnRawQuery = sandbox.stub(client.graphQL, "rawQuery").resolves({ | ||
setCardHolderRepresentation: cardHolderRepresentation | ||
setCardHolderRepresentation: cardHolderRepresentation, | ||
} as any); | ||
// act | ||
const result = await card.setCardHolderRepresentation(cardHolderRepresentation); | ||
const result = await card.setCardHolderRepresentation( | ||
cardHolderRepresentation | ||
); | ||
// assert | ||
sinon.assert.calledOnce(spyOnRawQuery); | ||
expect(spyOnRawQuery.getCall(0).args[1]).to.eql({ cardHolderRepresentation }); | ||
expect(spyOnRawQuery.getCall(0).args[1]).to.eql({ | ||
cardHolderRepresentation, | ||
}); | ||
expect(result).to.eq(cardHolderRepresentation); | ||
@@ -404,0 +488,0 @@ }); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
953219
16944