Skip to content

Commit

Permalink
Merge pull request #377 from capacitor-community/feat/remove_beta_tasks
Browse files Browse the repository at this point in the history
feat(terminal): remove beta tasks
  • Loading branch information
rdlabo authored Aug 13, 2024
2 parents cd800d8 + 4680e31 commit 5562978
Show file tree
Hide file tree
Showing 24 changed files with 1,517 additions and 216 deletions.
4 changes: 2 additions & 2 deletions demo/angular/src/app/terminal/terminal.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@

<ion-item-divider><ion-label>Device Update - Happy Path</ion-label></ion-item-divider>
<ion-item
(click)="checkUpdateDevice( terminalConnectTypes.Bluetooth, simulateReaderUpdate.UpdateAvailable)"
(click)="checkUpdateDeviceUpdate( terminalConnectTypes.Bluetooth)"
button="true"
detail="true"
><ion-label>simulateReaderUpdate.UpdateAvailable</ion-label></ion-item
>
<ion-item
(click)="checkUpdateDevice( terminalConnectTypes.Bluetooth, simulateReaderUpdate.Required)"
(click)="checkUpdateDeviceRequired( terminalConnectTypes.Bluetooth)"
button="true"
detail="true"
><ion-label>simulateReaderUpdate.Required</ion-label></ion-item
Expand Down
176 changes: 142 additions & 34 deletions demo/angular/src/app/terminal/terminal.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
import { HttpClient } from '@angular/common/http';
import { HelperService } from '../shared/helper.service';
import {
CartLineItem,
ReaderInterface, SimulateReaderUpdate,
StripeTerminal,
TerminalConnectTypes,
Expand All @@ -36,7 +37,9 @@ import {
import {happyPathBluetoothItems, happyPathItems} from './happyPathItems';
import {cancelPathItems} from './cancelPathItems';
import {checkDiscoverMethodItems} from './checkDiscoverMethodItems';
import {checkUpdateDeviceItems} from './checkUpdateDeviceItems';
import {updateDeviceRequiredItems} from './updateDeviceRequiredItems';
import {updateDeviceUpdateItems} from './updateDeviceUpdateItems';
import {Stripe} from '@capacitor-community/stripe';

@Component({
selector: 'app-terminal',
Expand Down Expand Up @@ -145,20 +148,37 @@ export class TerminalPage {
true,
);

await StripeTerminal.collectPaymentMethod({ paymentIntent })
.then(() =>
this.helper.updateItem(this.eventItems, 'collectPaymentMethod', true),
)
.catch(async (e) => {
await this.helper.updateItem(
this.eventItems,
'collectPaymentMethod',
false,
);
throw e;
});
if (readerType === TerminalConnectTypes.Internet) {
await StripeTerminal.setReaderDisplay({
currency: 'usd',
tax: 0,
total: 1000,
lineItems: [{
displayName: 'winecode',
quantity: 2,
amount: 500
}] as CartLineItem[],
})

await new Promise((resolve) => setTimeout(resolve, 2000));

await StripeTerminal.clearReaderDisplay();
}



if (type === 'cancelPath') {
// During Collect, cancel the payment
StripeTerminal.collectPaymentMethod({ paymentIntent })
.catch(async (e) => {
await this.helper.updateItem(
this.eventItems,
'collectPaymentMethod',
false,
);
throw e;
});
await this.helper.updateItem(this.eventItems, 'collectPaymentMethod', true);
await new Promise((resolve) => setTimeout(resolve, 2000));
await StripeTerminal.cancelCollectPaymentMethod().catch(async (e) => {
await this.helper.updateItem(
Expand All @@ -174,6 +194,18 @@ export class TerminalPage {
true,
);
} else {
await StripeTerminal.collectPaymentMethod({ paymentIntent })
.then(() =>
this.helper.updateItem(this.eventItems, 'collectPaymentMethod', true),
)
.catch(async (e) => {
await this.helper.updateItem(
this.eventItems,
'collectPaymentMethod',
false,
);
throw e;
});
await StripeTerminal.confirmPaymentIntent();
await this.helper.updateItem(
this.eventItems,
Expand All @@ -186,28 +218,102 @@ export class TerminalPage {
this.listenerHandlers.forEach((handler) => handler.remove());
}

async checkUpdateDevice(readerType: TerminalConnectTypes = TerminalConnectTypes.Bluetooth, simulateReaderUpdate: SimulateReaderUpdate) {
await this.prepareTerminalEvents(structuredClone(checkUpdateDeviceItems));

switch (simulateReaderUpdate) {
case SimulateReaderUpdate.UpdateAvailable:
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.UpdateAvailable })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:UPDATE_AVAILABLE', true));
break;
case SimulateReaderUpdate.LowBattery:
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.LowBattery })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:LOW_BATTERY', true));
break;
case SimulateReaderUpdate.LowBatterySucceedConnect:
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.LowBatterySucceedConnect })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:LOW_BATTERY_SUCCEED_CONNECT', true));
break;
case SimulateReaderUpdate.Required:
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.Required })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:REQUIRED', true));
break;
async checkUpdateDeviceUpdate(readerType: TerminalConnectTypes = TerminalConnectTypes.Bluetooth) {
await this.prepareTerminalEvents(structuredClone(updateDeviceUpdateItems));
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.UpdateAvailable })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:UPDATE_AVAILABLE', true));

const result = await StripeTerminal.discoverReaders({
type: readerType,
locationId:
[TerminalConnectTypes.Usb].includes(readerType)
? 'tml_Ff37mAmk1XdBYT' // Auckland, New Zealand
: 'tml_FOUOdQVIxvVdvN', // San Francisco, CA 94110
}).catch((e) => {
this.helper.updateItem(this.eventItems, 'discoverReaders', false);
throw e;
});

await this.helper.updateItem(
this.eventItems,
'discoverReaders',
result.readers.length > 0,
);

const selectedReader =
result.readers.length === 1
? result.readers[0]
: await this.alertFilterReaders(result.readers);
console.log(selectedReader);
if (!selectedReader) {
alert('No reader selected');
return;
}

await StripeTerminal.connectReader({
reader: selectedReader,
}).catch((e) => {
alert(e);
this.helper.updateItem(this.eventItems, 'connectReader', false);
throw e;
});
await this.helper.updateItem(this.eventItems, 'connectReader', true);

await StripeTerminal.installAvailableUpdate()
.then(() => this.helper.updateItem(this.eventItems, 'installAvailableUpdate', true));

await new Promise((resolve) => setTimeout(resolve, 2000));

await StripeTerminal.cancelInstallUpdate()
.then(() => this.helper.updateItem(this.eventItems, 'cancelInstallUpdate', true));

// await new Promise((resolve) => setTimeout(resolve, 5000));

const { paymentIntent } = await firstValueFrom(
this.http.post<{
paymentIntent: string;
}>(environment.api + 'connection/intent', {}),
).catch(async (e) => {
await this.helper.updateItem(
this.eventItems,
'HttpClientPaymentIntent',
false,
);
throw e;
});
await this.helper.updateItem(
this.eventItems,
'HttpClientPaymentIntent',
true,
);

await StripeTerminal.collectPaymentMethod({ paymentIntent })
.then(() =>
this.helper.updateItem(this.eventItems, 'collectPaymentMethod', true),
)
.catch(async (e) => {
await this.helper.updateItem(
this.eventItems,
'collectPaymentMethod',
false,
);
throw e;
});

await StripeTerminal.disconnectReader().catch((e) => {
this.helper.updateItem(this.eventItems, 'disconnectReader', false);
throw e;
});
await this.helper.updateItem(this.eventItems, 'disconnectReader', true);

this.listenerHandlers.forEach((handler) => handler.remove());
}

async checkUpdateDeviceRequired(readerType: TerminalConnectTypes = TerminalConnectTypes.Bluetooth) {
await this.prepareTerminalEvents(structuredClone(updateDeviceRequiredItems));
await StripeTerminal.setSimulatorConfiguration({ update: SimulateReaderUpdate.Required })
.then(() => this.helper.updateItem(this.eventItems, 'setSimulatorConfiguration:REQUIRED', true));

const result = await StripeTerminal.discoverReaders({
type: readerType,
locationId:
Expand Down Expand Up @@ -347,12 +453,14 @@ export class TerminalPage {
const alert = await this.alertCtrl.create({
header: `Select a reader`,
message: `Select a reader to connect to.`,
backdropDismiss: false,
inputs: readers.map((reader, index) => ({
name: 'serialNumber',
type: 'radio',
label: reader.serialNumber,
label: reader.deviceType,
value: reader.serialNumber,
checked: index === 0,
disabled: reader.status === 'OFFLINE'
})),
buttons: [
{
Expand Down
54 changes: 54 additions & 0 deletions demo/angular/src/app/terminal/updateDeviceRequiredItems.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {ITestItems} from '../shared/interfaces';
import {TerminalEventsEnum} from '@capacitor-community/stripe-terminal';

export const updateDeviceRequiredItems: ITestItems[] = [
{
type: 'method',
name: 'initialize',
},
{
type: 'event',
name: TerminalEventsEnum.Loaded,
},

{
type: 'method',
name: 'setSimulatorConfiguration:REQUIRED',
},
{
type: 'method',
name: 'discoverReaders',
},
{
type: 'event',
name: TerminalEventsEnum.DiscoveredReaders,
},
{
type: 'method',
name: 'connectReader',
},
{
type: 'event',
name: TerminalEventsEnum.ConnectedReader,
},
{
type: 'event',
name: TerminalEventsEnum.StartInstallingUpdate,
},
{
type: 'event',
name: TerminalEventsEnum.ReaderSoftwareUpdateProgress,
},
{
type: 'event',
name: TerminalEventsEnum.FinishInstallingUpdate,
},
{
type: 'method',
name: 'disconnectReader',
},
{
type: 'event',
name: TerminalEventsEnum.DisconnectedReader,
},
];
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {ITestItems} from '../shared/interfaces';
import {TerminalEventsEnum} from '@capacitor-community/stripe-terminal';

export const checkUpdateDeviceItems: ITestItems[] = [
export const updateDeviceUpdateItems: ITestItems[] = [
{
type: 'method',
name: 'initialize',
Expand All @@ -10,47 +10,46 @@ export const checkUpdateDeviceItems: ITestItems[] = [
type: 'event',
name: TerminalEventsEnum.Loaded,
},

{
type: 'method',
name: 'setSimulatorConfiguration:UPDATE_AVAILABLE',
name: 'discoverReaders',
},
{
type: 'event',
name: TerminalEventsEnum.ReportAvailableUpdate,
name: TerminalEventsEnum.DiscoveredReaders,
},
{
type: 'method',
name: 'setSimulatorConfiguration:REQUIRED',
name: 'connectReader',
},
{
type: 'event',
name: TerminalEventsEnum.StartInstallingUpdate,
name: TerminalEventsEnum.ConnectedReader,
},

{
type: 'event',
name: TerminalEventsEnum.ReaderSoftwareUpdateProgress,
type: 'method',
name: 'setSimulatorConfiguration:UPDATE_AVAILABLE',
},
{
type: 'event',
name: TerminalEventsEnum.FinishInstallingUpdate,
name: TerminalEventsEnum.ReportAvailableUpdate,
},

{
type: 'method',
name: 'discoverReaders',
name: 'installAvailableUpdate',
},
{
type: 'event',
name: TerminalEventsEnum.DiscoveredReaders,
name: TerminalEventsEnum.StartInstallingUpdate,
},
{
type: 'method',
name: 'connectReader',
type: 'event',
name: TerminalEventsEnum.ReaderSoftwareUpdateProgress,
},
{
type: 'event',
name: TerminalEventsEnum.ConnectedReader,
type: 'method',
name: 'cancelInstallUpdate',
},
{
type: 'method',
Expand Down
4 changes: 2 additions & 2 deletions packages/identity/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/identity/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@capacitor-community/stripe-identity",
"version": "6.0.2",
"version": "6.1.0",
"engines": {
"node": ">=18.0.0"
},
Expand Down
Loading

0 comments on commit 5562978

Please sign in to comment.