Skip to content

Commit 2d36a20

Browse files
vctrchuclaude
andcommitted
feat(pos): add TypeScript types for pos.app.ready.data background target
Add DataTargetApi type and DataExtensionTargets interface for the new persistent background extension target. DataTargetApi provides the full POS API surface excluding UI-presenting APIs (Toast, Print, Camera, PinPad). Background extensions that need UI should use companion targets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 12b3941 commit 2d36a20

3 files changed

Lines changed: 41 additions & 2 deletions

File tree

packages/ui-extensions/src/surfaces/point-of-sale/api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export type {ActionApi, ActionApiContent} from './api/action-api/action-api';
1313

1414
export type {StandardApi} from './api/standard/standard-api';
1515
export type {ActionTargetApi} from './api/action-target-api/action-target-api';
16+
export type {DataTargetApi} from './api/data-target-api/data-target-api';
1617

1718
export type {
1819
CameraApi,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {CartApi} from '../cart-api/cart-api';
2+
import {ConnectivityApi} from '../connectivity-api/connectivity-api';
3+
import {DeviceApi} from '../device-api/device-api';
4+
import {LocaleApi} from '../locale-api/locale-api';
5+
import {ProductSearchApi} from '../product-search-api/product-search-api';
6+
import {SessionApi} from '../session-api/session-api';
7+
import {StorageApi} from '../storage-api/storage-api';
8+
import type {I18n} from '../../../../api';
9+
10+
/**
11+
* API surface for non-rendering data extension targets.
12+
*/
13+
export type DataTargetApi<T> = {
14+
extensionPoint: T;
15+
i18n: I18n;
16+
} & SessionApi &
17+
StorageApi &
18+
LocaleApi &
19+
ConnectivityApi &
20+
DeviceApi &
21+
ProductSearchApi &
22+
CartApi;

packages/ui-extensions/src/surfaces/point-of-sale/extension-targets.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import {
66
import {TransactionCompleteData} from './event/data/TransactionCompleteData';
77
import {CartUpdateEventData} from './event/data/CartUpdateEventData';
88

9-
import type {RenderExtension} from '../../extension';
9+
import type {RenderExtension, RunnableExtension} from '../../extension';
10+
11+
import type {DataTargetApi} from './api/data-target-api/data-target-api';
1012

1113
import type {
1214
StandardApi,
@@ -43,6 +45,18 @@ export interface EventExtensionTargets {
4345
) => Promise<BaseOutput>;
4446
}
4547

48+
export interface DataExtensionTargets {
49+
/**
50+
* A persistent background extension that starts when POS loads and runs for
51+
* the session's lifetime. Use this target to observe POS events without
52+
* rendering UI.
53+
*/
54+
'pos.app.ready.data': RunnableExtension<
55+
DataTargetApi<'pos.app.ready.data'>,
56+
undefined
57+
>;
58+
}
59+
4660
export interface RenderExtensionTargets {
4761
/**
4862
* Renders a single interactive tile component on the POS home screen's smart grid. The tile appears once during home screen initialization and remains persistent until navigation occurs. Use this target for high-frequency actions, status displays, or entry points to workflows that merchants need daily.
@@ -362,8 +376,10 @@ export interface RenderExtensionTargets {
362376

363377
export interface ExtensionTargets
364378
extends RenderExtensionTargets,
365-
EventExtensionTargets {}
379+
EventExtensionTargets,
380+
DataExtensionTargets {}
366381

367382
export type RenderExtensionTarget = keyof RenderExtensionTargets;
368383
export type EventExtensionTarget = keyof EventExtensionTargets;
384+
export type DataExtensionTarget = keyof DataExtensionTargets;
369385
export type ExtensionTarget = keyof ExtensionTargets;

0 commit comments

Comments
 (0)