@sayren/store-sdk 0.30.11 → 0.30.13

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.mts CHANGED
@@ -2272,6 +2272,83 @@ export declare const APP_SECRET_NAME_PATTERN: RegExp;
2272
2272
  export declare const APP_SECRETS_MAX = 20;
2273
2273
  export declare const APP_EVENTS_MAX = 50;
2274
2274
  export declare const APP_NETWORK_HOSTS_MAX = 20;
2275
+ export declare const APP_PUBLIC_HTTP_MAX = 20;
2276
+ export declare const APP_SCHEDULES_MAX = 10;
2277
+ /** HTTP 핸들러 키 — `"<메서드> <경로>"`(`@sayren/app` `defineApp({ http })`와 같은 형식) */
2278
+ export declare const APP_HTTP_KEY_PATTERN: RegExp;
2279
+ /** 예약 작업 이름 — 설정 키와 같은 형식 */
2280
+ export declare const APP_SCHEDULE_NAME_PATTERN: RegExp;
2281
+ /** 예약 작업 간격 → 분 */
2282
+ export declare const APP_SCHEDULE_INTERVALS: {
2283
+ readonly "15m": 15;
2284
+ readonly "30m": 30;
2285
+ readonly "1h": 60;
2286
+ readonly "3h": 180;
2287
+ readonly "6h": 360;
2288
+ readonly "12h": 720;
2289
+ readonly "1d": 1440;
2290
+ };
2291
+ export type AppScheduleInterval = keyof typeof APP_SCHEDULE_INTERVALS;
2292
+ /** 흐름 알림 이름 — 흐름 알림 채널 `app.<handle>.<이름>`의 마지막 마디(소문자·숫자·하이픈) */
2293
+ export declare const APP_FLOW_NOTIFICATION_PATTERN: RegExp;
2294
+ /** 흐름 사건 이름 — 사건 키 `app.<handle>.<이름>`의 마지막 마디 */
2295
+ export declare const APP_FLOW_EVENT_PATTERN: RegExp;
2296
+ export declare const APP_FLOW_ITEMS_MAX = 20;
2297
+ /** 흐름 알림 매개변수 — 셀러가 편집기에서 식으로 값을 연결한다 */
2298
+ export declare const appFlowParamSchema: z.ZodObject<{
2299
+ type: z.ZodEnum<{
2300
+ string: "string";
2301
+ number: "number";
2302
+ boolean: "boolean";
2303
+ }>;
2304
+ label: z.ZodString;
2305
+ required: z.ZodOptional<z.ZodBoolean>;
2306
+ }, z.core.$strict>;
2307
+ export type AppFlowParam = z.infer<typeof appFlowParamSchema>;
2308
+ export declare const appFlowNotificationSchema: z.ZodObject<{
2309
+ label: z.ZodString;
2310
+ description: z.ZodOptional<z.ZodString>;
2311
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2312
+ type: z.ZodEnum<{
2313
+ string: "string";
2314
+ number: "number";
2315
+ boolean: "boolean";
2316
+ }>;
2317
+ label: z.ZodString;
2318
+ required: z.ZodOptional<z.ZodBoolean>;
2319
+ }, z.core.$strict>>>;
2320
+ }, z.core.$strict>;
2321
+ export type AppFlowNotification = z.infer<typeof appFlowNotificationSchema>;
2322
+ export declare const appFlowEventSchema: z.ZodObject<{
2323
+ label: z.ZodString;
2324
+ description: z.ZodOptional<z.ZodString>;
2325
+ }, z.core.$strict>;
2326
+ export type AppFlowEvent = z.infer<typeof appFlowEventSchema>;
2327
+ /** 에이전트 도구 이름 — 소문자·숫자·하이픈 */
2328
+ export declare const APP_TOOL_NAME_PATTERN: RegExp;
2329
+ export declare const appToolInputSchema: z.ZodObject<{
2330
+ type: z.ZodEnum<{
2331
+ string: "string";
2332
+ number: "number";
2333
+ boolean: "boolean";
2334
+ }>;
2335
+ description: z.ZodOptional<z.ZodString>;
2336
+ required: z.ZodOptional<z.ZodBoolean>;
2337
+ }, z.core.$strict>;
2338
+ export type AppToolInput = z.infer<typeof appToolInputSchema>;
2339
+ export declare const appToolSchema: z.ZodObject<{
2340
+ description: z.ZodString;
2341
+ input: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2342
+ type: z.ZodEnum<{
2343
+ string: "string";
2344
+ number: "number";
2345
+ boolean: "boolean";
2346
+ }>;
2347
+ description: z.ZodOptional<z.ZodString>;
2348
+ required: z.ZodOptional<z.ZodBoolean>;
2349
+ }, z.core.$strict>>>;
2350
+ }, z.core.$strict>;
2351
+ export type AppTool = z.infer<typeof appToolSchema>;
2275
2352
  /** 앱 목록에 보이는 아이콘·README(#22 앱 목록 시안) — 앱 폴더의 파일을 `sayren app deploy`가 버전과 함께 올린다 */
2276
2353
  export declare const APP_ICON_MAX_BYTES: number;
2277
2354
  export declare const APP_ICON_MIN_PX = 512;
@@ -2288,7 +2365,27 @@ export declare const appManifestSchema: z.ZodObject<{
2288
2365
  supportEmail: z.ZodOptional<z.ZodEmail>;
2289
2366
  icon: z.ZodOptional<z.ZodString>;
2290
2367
  readme: z.ZodOptional<z.ZodString>;
2291
- runtime: z.ZodDefault<z.ZodLiteral<"code">>;
2368
+ runtime: z.ZodDefault<z.ZodEnum<{
2369
+ code: "code";
2370
+ external: "external";
2371
+ }>>;
2372
+ external: z.ZodOptional<z.ZodObject<{
2373
+ url: z.ZodURL;
2374
+ }, z.core.$strict>>;
2375
+ mcp: z.ZodOptional<z.ZodObject<{
2376
+ tools: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2377
+ description: z.ZodString;
2378
+ input: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2379
+ type: z.ZodEnum<{
2380
+ string: "string";
2381
+ number: "number";
2382
+ boolean: "boolean";
2383
+ }>;
2384
+ description: z.ZodOptional<z.ZodString>;
2385
+ required: z.ZodOptional<z.ZodBoolean>;
2386
+ }, z.core.$strict>>>;
2387
+ }, z.core.$strict>>>;
2388
+ }, z.core.$strict>>;
2292
2389
  scopes: z.ZodDefault<z.ZodArray<z.ZodString>>;
2293
2390
  network: z.ZodDefault<z.ZodObject<{
2294
2391
  hosts: z.ZodArray<z.ZodString>;
@@ -2323,6 +2420,39 @@ export declare const appManifestSchema: z.ZodObject<{
2323
2420
  entry: z.ZodString;
2324
2421
  }, z.core.$strict>;
2325
2422
  }, z.core.$strict>>;
2423
+ http: z.ZodOptional<z.ZodObject<{
2424
+ public: z.ZodArray<z.ZodString>;
2425
+ }, z.core.$strict>>;
2426
+ schedules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2427
+ every: z.ZodEnum<{
2428
+ "15m": "15m";
2429
+ "30m": "30m";
2430
+ "1h": "1h";
2431
+ "3h": "3h";
2432
+ "6h": "6h";
2433
+ "12h": "12h";
2434
+ "1d": "1d";
2435
+ }>;
2436
+ }, z.core.$strict>>>;
2437
+ flow: z.ZodOptional<z.ZodObject<{
2438
+ notifications: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2439
+ label: z.ZodString;
2440
+ description: z.ZodOptional<z.ZodString>;
2441
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2442
+ type: z.ZodEnum<{
2443
+ string: "string";
2444
+ number: "number";
2445
+ boolean: "boolean";
2446
+ }>;
2447
+ label: z.ZodString;
2448
+ required: z.ZodOptional<z.ZodBoolean>;
2449
+ }, z.core.$strict>>>;
2450
+ }, z.core.$strict>>>;
2451
+ events: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2452
+ label: z.ZodString;
2453
+ description: z.ZodOptional<z.ZodString>;
2454
+ }, z.core.$strict>>>;
2455
+ }, z.core.$strict>>;
2326
2456
  settings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
2327
2457
  type: z.ZodEnum<{
2328
2458
  string: "string";
@@ -2352,7 +2482,7 @@ export declare const APP_UI_MAX_BYTES: number;
2352
2482
  export declare const APP_UI_MAX_FILES = 2000;
2353
2483
  export interface AppManifestProblem {
2354
2484
  path: string;
2355
- code: "EVENT_SCOPE_MISSING" | "SELECT_OPTIONS_REQUIRED" | "SECRET_FIELD_TYPE" | "DEFAULT_TYPE_MISMATCH" | "DUPLICATE";
2485
+ code: "EVENT_SCOPE_MISSING" | "SELECT_OPTIONS_REQUIRED" | "SECRET_FIELD_TYPE" | "DEFAULT_TYPE_MISMATCH" | "DUPLICATE" | "EXTERNAL_URL_REQUIRED" | "EXTERNAL_NETWORK_HOSTS" | "EXTERNAL_URL_INVALID";
2356
2486
  message: string;
2357
2487
  }
2358
2488
  /** 스키마가 보지 못하는 필드 사이 규칙 — 빌드 `VERIFY`·CLI `app verify`가 같은 결과를 낸다. 비어 있으면 통과 */
@@ -2365,6 +2495,17 @@ export interface AppCapabilities {
2365
2495
  events: AppEventType[];
2366
2496
  networkHosts: string[];
2367
2497
  adminPage: boolean;
2498
+ /** 공개 HTTP 핸들러 키(`"GET /track/:id"`). 옛 버전 행에는 없다 — 읽을 때 `?? []` */
2499
+ publicHttp?: string[];
2500
+ /** 예약 작업 이름 → 간격. 옛 버전 행에는 없다 — 읽을 때 `?? {}` */
2501
+ schedules?: Record<string, AppScheduleInterval>;
2502
+ /** 흐름 알림(이름 → 표시 이름·매개변수)·흐름 사건(이름 → 표시 이름). 옛 버전 행에는 없다 — 읽을 때 `?? {}` */
2503
+ flowNotifications?: Record<string, AppFlowNotification>;
2504
+ flowEvents?: Record<string, AppFlowEvent>;
2505
+ /** 외부 런타임의 호출 호스트(동의 화면). 코드 앱·옛 버전 행은 없다 */
2506
+ externalHost?: string | null;
2507
+ /** 에이전트 도구. 옛 버전 행에는 없다 — 읽을 때 `?? {}` */
2508
+ tools?: Record<string, AppTool>;
2368
2509
  /** 필수 설정 키 — 하나라도 비어 있으면 이벤트 함수를 부르지 않는다 */
2369
2510
  requiredSettings: string[];
2370
2511
  secretSettings: string[];
@@ -2375,7 +2516,7 @@ export declare function appCapabilitiesOf(manifest: AppManifest): AppCapabilitie
2375
2516
  * 동의 문단은 accounts 설치 화면·상점 플랫폼 앱 상세·유저 문서가 같은 문장을 쓴다.
2376
2517
  */
2377
2518
  export interface AppCapabilityDefinition {
2378
- key: "scopes" | "network" | "events" | "ui";
2519
+ key: "scopes" | "network" | "events" | "ui" | "publicHttp" | "schedules" | "runtime" | "tools";
2379
2520
  /** 동의 화면의 문단 제목 */
2380
2521
  title: string;
2381
2522
  /** 동의 화면에 보일 줄 — 없으면 문단을 그리지 않는다 */
@@ -2384,6 +2525,37 @@ export interface AppCapabilityDefinition {
2384
2525
  widens(previous: AppCapabilities, next: AppCapabilities): boolean;
2385
2526
  }
2386
2527
  export declare const APP_CAPABILITIES: readonly AppCapabilityDefinition[];
2528
+ /** 요청(메서드·경로)이 HTTP 핸들러 키에 맞는가 — `:이름`은 경로 한 마디에 맞는다(`@sayren/app`의 핸들러 고르기와 같은 규칙) */
2529
+ export declare function appHttpKeyMatches(key: string, method: string, path: string): boolean;
2530
+ /** 응답용 예약 작업 목록(이름순) — 옛 버전 행(`schedules` 없음)은 빈 목록 */
2531
+ export declare function appScheduleListOf(capabilities: Pick<AppCapabilities, "schedules">): Array<{
2532
+ name: string;
2533
+ every: AppScheduleInterval;
2534
+ }>;
2535
+ /** 응답용 흐름 알림·사건 목록(이름순) — 옛 버전 행은 빈 목록 */
2536
+ export declare function appFlowSummaryOf(capabilities: Pick<AppCapabilities, "flowNotifications" | "flowEvents">): {
2537
+ flowNotifications: Array<{
2538
+ name: string;
2539
+ label: string;
2540
+ params: Array<{
2541
+ name: string;
2542
+ type: AppFlowParam["type"];
2543
+ label: string;
2544
+ required: boolean;
2545
+ }>;
2546
+ }>;
2547
+ flowEvents: Array<{
2548
+ name: string;
2549
+ label: string;
2550
+ }>;
2551
+ };
2552
+ /** 응답용 도구 목록(이름순) — 옛 버전 행은 빈 목록 */
2553
+ export declare function appToolListOf(capabilities: Pick<AppCapabilities, "tools">): Array<{
2554
+ name: string;
2555
+ description: string;
2556
+ }>;
2557
+ /** 예약 간격의 표시 이름 — 동의 화면·상점 플랫폼이 같이 쓴다 */
2558
+ export declare function appScheduleIntervalLabel(every: AppScheduleInterval): string;
2387
2559
  /** 재동의가 필요한 capability 키 — 비어 있으면 release가 모든 설치에 곧바로 반영된다 */
2388
2560
  export declare function appManifestWidens(previous: AppCapabilities, next: AppCapabilities): AppCapabilityDefinition["key"][];
2389
2561
  //#endregion
@@ -2418,6 +2590,13 @@ export declare const appInstallationStatusSchema: z.ZodEnum<{
2418
2590
  }>;
2419
2591
  export type AppInstallationStatus = z.infer<typeof appInstallationStatusSchema>;
2420
2592
  /** 설치 앱의 앱 정보 — 상점이 보는 범위만(개발자 비밀 값·소스·빌드는 없다) */
2593
+ /** 상점이 보는 앱 공개 범위 — 개발 중(개발자 조직) · 이 상점 전용 · 공개 */
2594
+ export declare const appVisibilitySchema: z.ZodEnum<{
2595
+ PUBLIC: "PUBLIC";
2596
+ DEVELOPMENT: "DEVELOPMENT";
2597
+ PRIVATE: "PRIVATE";
2598
+ }>;
2599
+ export type AppVisibility = z.infer<typeof appVisibilitySchema>;
2421
2600
  export declare const appInstallationAppSchema: z.ZodObject<{
2422
2601
  appId: z.ZodString;
2423
2602
  handle: z.ZodString;
@@ -2471,6 +2650,41 @@ export declare const appInstallationSettingsUpdateSchema: z.ZodObject<{
2471
2650
  values: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
2472
2651
  }, z.core.$strip>;
2473
2652
  export type AppInstallationSettingsUpdate = z.infer<typeof appInstallationSettingsUpdateSchema>;
2653
+ /** 예약 작업 한 줄 — 매니페스트 `schedules`의 이름과 간격 */
2654
+ export declare const appScheduleSummarySchema: z.ZodObject<{
2655
+ name: z.ZodString;
2656
+ every: z.ZodEnum<{
2657
+ "15m": "15m";
2658
+ "30m": "30m";
2659
+ "1h": "1h";
2660
+ "3h": "3h";
2661
+ "6h": "6h";
2662
+ "12h": "12h";
2663
+ "1d": "1d";
2664
+ }>;
2665
+ }, z.core.$strip>;
2666
+ export type AppScheduleSummary = z.infer<typeof appScheduleSummarySchema>;
2667
+ /** 흐름 알림·사건(매뉴얼 「주문 흐름에서 앱 쓰기」) — 흐름 편집기가 알림 채널·매개변수와 사건 이름을 고른다 */
2668
+ export declare const appFlowNotificationSummarySchema: z.ZodObject<{
2669
+ name: z.ZodString;
2670
+ label: z.ZodString;
2671
+ params: z.ZodArray<z.ZodObject<{
2672
+ name: z.ZodString;
2673
+ type: z.ZodEnum<{
2674
+ string: "string";
2675
+ number: "number";
2676
+ boolean: "boolean";
2677
+ }>;
2678
+ label: z.ZodString;
2679
+ required: z.ZodBoolean;
2680
+ }, z.core.$strip>>;
2681
+ }, z.core.$strip>;
2682
+ export type AppFlowNotificationSummary = z.infer<typeof appFlowNotificationSummarySchema>;
2683
+ export declare const appFlowEventSummarySchema: z.ZodObject<{
2684
+ name: z.ZodString;
2685
+ label: z.ZodString;
2686
+ }, z.core.$strip>;
2687
+ export type AppFlowEventSummary = z.infer<typeof appFlowEventSummarySchema>;
2474
2688
  export declare const appInstallationSchema: z.ZodObject<{
2475
2689
  installationId: z.ZodString;
2476
2690
  storeId: z.ZodString;
@@ -2533,6 +2747,24 @@ export declare const appInstallationSchema: z.ZodObject<{
2533
2747
  "APP.STORE_REDACT": "APP.STORE_REDACT";
2534
2748
  "APP.CUSTOMER_REDACT": "APP.CUSTOMER_REDACT";
2535
2749
  }>>;
2750
+ publicHttp: z.ZodDefault<z.ZodArray<z.ZodString>>;
2751
+ schedules: z.ZodDefault<z.ZodArray<z.ZodObject<{
2752
+ name: z.ZodString;
2753
+ every: z.ZodEnum<{
2754
+ "15m": "15m";
2755
+ "30m": "30m";
2756
+ "1h": "1h";
2757
+ "3h": "3h";
2758
+ "6h": "6h";
2759
+ "12h": "12h";
2760
+ "1d": "1d";
2761
+ }>;
2762
+ }, z.core.$strip>>>;
2763
+ tools: z.ZodDefault<z.ZodArray<z.ZodObject<{
2764
+ name: z.ZodString;
2765
+ description: z.ZodString;
2766
+ }, z.core.$strip>>>;
2767
+ externalHost: z.ZodDefault<z.ZodNullable<z.ZodString>>;
2536
2768
  }, z.core.$strip>>>;
2537
2769
  grantedScopes: z.ZodArray<z.ZodString>;
2538
2770
  grantedNetworkHosts: z.ZodArray<z.ZodString>;
@@ -2562,6 +2794,42 @@ export declare const appInstallationSchema: z.ZodObject<{
2562
2794
  "APP.CUSTOMER_REDACT": "APP.CUSTOMER_REDACT";
2563
2795
  }>>;
2564
2796
  adminPage: z.ZodBoolean;
2797
+ publicHttp: z.ZodDefault<z.ZodArray<z.ZodString>>;
2798
+ schedules: z.ZodDefault<z.ZodArray<z.ZodObject<{
2799
+ name: z.ZodString;
2800
+ every: z.ZodEnum<{
2801
+ "15m": "15m";
2802
+ "30m": "30m";
2803
+ "1h": "1h";
2804
+ "3h": "3h";
2805
+ "6h": "6h";
2806
+ "12h": "12h";
2807
+ "1d": "1d";
2808
+ }>;
2809
+ }, z.core.$strip>>>;
2810
+ tools: z.ZodDefault<z.ZodArray<z.ZodObject<{
2811
+ name: z.ZodString;
2812
+ description: z.ZodString;
2813
+ }, z.core.$strip>>>;
2814
+ externalHost: z.ZodDefault<z.ZodNullable<z.ZodString>>;
2815
+ flowNotifications: z.ZodDefault<z.ZodArray<z.ZodObject<{
2816
+ name: z.ZodString;
2817
+ label: z.ZodString;
2818
+ params: z.ZodArray<z.ZodObject<{
2819
+ name: z.ZodString;
2820
+ type: z.ZodEnum<{
2821
+ string: "string";
2822
+ number: "number";
2823
+ boolean: "boolean";
2824
+ }>;
2825
+ label: z.ZodString;
2826
+ required: z.ZodBoolean;
2827
+ }, z.core.$strip>>;
2828
+ }, z.core.$strip>>>;
2829
+ flowEvents: z.ZodDefault<z.ZodArray<z.ZodObject<{
2830
+ name: z.ZodString;
2831
+ label: z.ZodString;
2832
+ }, z.core.$strip>>>;
2565
2833
  settings: z.ZodObject<{
2566
2834
  fields: z.ZodRecord<z.ZodString, z.ZodObject<{
2567
2835
  type: z.ZodEnum<{
@@ -2683,6 +2951,11 @@ export declare const storeAppSchema: z.ZodObject<{
2683
2951
  developerName: z.ZodString;
2684
2952
  versionNumber: z.ZodNumber;
2685
2953
  installationId: z.ZodNullable<z.ZodString>;
2954
+ visibility: z.ZodDefault<z.ZodEnum<{
2955
+ PUBLIC: "PUBLIC";
2956
+ DEVELOPMENT: "DEVELOPMENT";
2957
+ PRIVATE: "PRIVATE";
2958
+ }>>;
2686
2959
  }, z.core.$strip>;
2687
2960
  export type StoreApp = z.infer<typeof storeAppSchema>;
2688
2961
  /** `GET /v1/apps/catalog/{appId}` — 앱 상세·설치 화면 */
@@ -2695,6 +2968,11 @@ export declare const storeAppDetailSchema: z.ZodObject<{
2695
2968
  developerName: z.ZodString;
2696
2969
  versionNumber: z.ZodNumber;
2697
2970
  installationId: z.ZodNullable<z.ZodString>;
2971
+ visibility: z.ZodDefault<z.ZodEnum<{
2972
+ PUBLIC: "PUBLIC";
2973
+ DEVELOPMENT: "DEVELOPMENT";
2974
+ PRIVATE: "PRIVATE";
2975
+ }>>;
2698
2976
  readme: z.ZodNullable<z.ZodString>;
2699
2977
  supportEmail: z.ZodNullable<z.ZodString>;
2700
2978
  scopes: z.ZodArray<z.ZodString>;
@@ -2724,6 +3002,24 @@ export declare const storeAppDetailSchema: z.ZodObject<{
2724
3002
  "APP.CUSTOMER_REDACT": "APP.CUSTOMER_REDACT";
2725
3003
  }>>;
2726
3004
  networkHosts: z.ZodArray<z.ZodString>;
3005
+ publicHttp: z.ZodDefault<z.ZodArray<z.ZodString>>;
3006
+ schedules: z.ZodDefault<z.ZodArray<z.ZodObject<{
3007
+ name: z.ZodString;
3008
+ every: z.ZodEnum<{
3009
+ "15m": "15m";
3010
+ "30m": "30m";
3011
+ "1h": "1h";
3012
+ "3h": "3h";
3013
+ "6h": "6h";
3014
+ "12h": "12h";
3015
+ "1d": "1d";
3016
+ }>;
3017
+ }, z.core.$strip>>>;
3018
+ tools: z.ZodDefault<z.ZodArray<z.ZodObject<{
3019
+ name: z.ZodString;
3020
+ description: z.ZodString;
3021
+ }, z.core.$strip>>>;
3022
+ externalHost: z.ZodDefault<z.ZodNullable<z.ZodString>>;
2727
3023
  settings: z.ZodRecord<z.ZodString, z.ZodObject<{
2728
3024
  type: z.ZodEnum<{
2729
3025
  string: "string";
@@ -2762,6 +3058,58 @@ export declare const appInstallationSelfSchema: z.ZodObject<{
2762
3058
  installedAt: z.ZodString;
2763
3059
  }, z.core.$strip>;
2764
3060
  export type AppInstallationSelf = z.infer<typeof appInstallationSelfSchema>;
3061
+ /** 에이전트 도구(매뉴얼 「에이전트 도구」) — `GET /v1/apps/tools` 한 줄 */
3062
+ export declare const appToolSummarySchema: z.ZodObject<{
3063
+ installationId: z.ZodString;
3064
+ app: z.ZodObject<{
3065
+ appId: z.ZodString;
3066
+ handle: z.ZodString;
3067
+ name: z.ZodString;
3068
+ }, z.core.$strip>;
3069
+ name: z.ZodString;
3070
+ description: z.ZodString;
3071
+ input: z.ZodArray<z.ZodObject<{
3072
+ name: z.ZodString;
3073
+ type: z.ZodEnum<{
3074
+ string: "string";
3075
+ number: "number";
3076
+ boolean: "boolean";
3077
+ }>;
3078
+ description: z.ZodNullable<z.ZodString>;
3079
+ required: z.ZodBoolean;
3080
+ }, z.core.$strip>>;
3081
+ }, z.core.$strip>;
3082
+ export type AppToolSummary = z.infer<typeof appToolSummarySchema>;
3083
+ export declare const appToolCallSchema: z.ZodObject<{
3084
+ input: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
3085
+ }, z.core.$strip>;
3086
+ export type AppToolCall = z.input<typeof appToolCallSchema>;
3087
+ export declare const appToolResultSchema: z.ZodObject<{
3088
+ result: z.ZodUnknown;
3089
+ }, z.core.$strip>;
3090
+ export type AppToolResult = z.infer<typeof appToolResultSchema>;
3091
+ /** 설치 저장소(`ctx.storage`, 매뉴얼 「앱 코드 › 저장소」) — 설치 토큰 전용 */
3092
+ export declare const APP_STORAGE_KEY_PATTERN: RegExp;
3093
+ export declare const APP_STORAGE_MAX_KEYS = 1000;
3094
+ /** 설치당 전체 크기(키 + JSON 값, UTF-8 바이트) */
3095
+ export declare const APP_STORAGE_MAX_BYTES: number;
3096
+ export declare const appStorageEntrySchema: z.ZodObject<{
3097
+ key: z.ZodString;
3098
+ value: z.ZodUnknown;
3099
+ updatedAt: z.ZodString;
3100
+ }, z.core.$strip>;
3101
+ export type AppStorageEntry = z.infer<typeof appStorageEntrySchema>;
3102
+ export declare const appStorageKeysSchema: z.ZodObject<{
3103
+ keys: z.ZodArray<z.ZodString>;
3104
+ }, z.core.$strip>;
3105
+ export type AppStorageKeys = z.infer<typeof appStorageKeysSchema>;
3106
+ export declare const appStoragePutSchema: z.ZodObject<{
3107
+ value: z.ZodUnknown & z.ZodType<{} | null, unknown, z.core.$ZodTypeInternals<{} | null, unknown>>;
3108
+ }, z.core.$strip>;
3109
+ export type AppStoragePut = z.infer<typeof appStoragePutSchema>;
3110
+ export declare const appStorageListQuerySchema: z.ZodObject<{
3111
+ prefix: z.ZodOptional<z.ZodString>;
3112
+ }, z.core.$strip>;
2765
3113
  export declare const developerOrgSchema: z.ZodObject<{
2766
3114
  orgId: z.ZodString;
2767
3115
  name: z.ZodString;
@@ -2830,6 +3178,8 @@ export declare const appVersionSchema: z.ZodObject<{
2830
3178
  events: z.ZodArray<z.ZodString>;
2831
3179
  networkHosts: z.ZodArray<z.ZodString>;
2832
3180
  adminPage: z.ZodBoolean;
3181
+ publicHttp: z.ZodOptional<z.ZodArray<z.ZodString>>;
3182
+ schedules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2833
3183
  requiredSettings: z.ZodArray<z.ZodString>;
2834
3184
  secretSettings: z.ZodArray<z.ZodString>;
2835
3185
  }, z.core.$strip>;
@@ -2867,6 +3217,26 @@ export declare const appVersionSchema: z.ZodObject<{
2867
3217
  createdAt: z.ZodString;
2868
3218
  }, z.core.$strip>;
2869
3219
  export type AppVersion = z.infer<typeof appVersionSchema>;
3220
+ /** 앱 공개 심사(#22, 매뉴얼 「앱 공개 범위」) — 개발자가 신청하고 운영자가 승인·반려한다 */
3221
+ export declare const appListingReviewStatusSchema: z.ZodEnum<{
3222
+ PENDING: "PENDING";
3223
+ REJECTED: "REJECTED";
3224
+ APPROVED: "APPROVED";
3225
+ }>;
3226
+ export type AppListingReviewStatus = z.infer<typeof appListingReviewStatusSchema>;
3227
+ export declare const appListingReviewSchema: z.ZodObject<{
3228
+ reviewId: z.ZodString;
3229
+ status: z.ZodEnum<{
3230
+ PENDING: "PENDING";
3231
+ REJECTED: "REJECTED";
3232
+ APPROVED: "APPROVED";
3233
+ }>;
3234
+ versionNumber: z.ZodNumber;
3235
+ reason: z.ZodNullable<z.ZodString>;
3236
+ requestedAt: z.ZodString;
3237
+ reviewedAt: z.ZodNullable<z.ZodString>;
3238
+ }, z.core.$strip>;
3239
+ export type AppListingReview = z.infer<typeof appListingReviewSchema>;
2870
3240
  export declare const developerAppSchema: z.ZodObject<{
2871
3241
  appId: z.ZodString;
2872
3242
  orgId: z.ZodString;
@@ -2891,6 +3261,19 @@ export declare const developerAppSchema: z.ZodObject<{
2891
3261
  }>;
2892
3262
  suspendedReason: z.ZodNullable<z.ZodString>;
2893
3263
  currentVersionNumber: z.ZodNullable<z.ZodNumber>;
3264
+ privateStoreId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
3265
+ listingReview: z.ZodDefault<z.ZodNullable<z.ZodObject<{
3266
+ reviewId: z.ZodString;
3267
+ status: z.ZodEnum<{
3268
+ PENDING: "PENDING";
3269
+ REJECTED: "REJECTED";
3270
+ APPROVED: "APPROVED";
3271
+ }>;
3272
+ versionNumber: z.ZodNumber;
3273
+ reason: z.ZodNullable<z.ZodString>;
3274
+ requestedAt: z.ZodString;
3275
+ reviewedAt: z.ZodNullable<z.ZodString>;
3276
+ }, z.core.$strip>>>;
2894
3277
  installations: z.ZodObject<{
2895
3278
  active: z.ZodNumber;
2896
3279
  pendingReconsent: z.ZodNumber;
@@ -2903,6 +3286,7 @@ export declare const developerAppCreateSchema: z.ZodObject<{
2903
3286
  handle: z.ZodString;
2904
3287
  name: z.ZodString;
2905
3288
  description: z.ZodOptional<z.ZodString>;
3289
+ privateStoreId: z.ZodOptional<z.ZodString>;
2906
3290
  }, z.core.$strip>;
2907
3291
  export type DeveloperAppCreate = z.infer<typeof developerAppCreateSchema>;
2908
3292
  /** `PUT /platform/v1/developer/apps/{appId}/versions` — CLI `app deploy`가 올리는 번들 */
@@ -2945,6 +3329,8 @@ export declare const appReleaseResultSchema: z.ZodObject<{
2945
3329
  events: z.ZodArray<z.ZodString>;
2946
3330
  networkHosts: z.ZodArray<z.ZodString>;
2947
3331
  adminPage: z.ZodBoolean;
3332
+ publicHttp: z.ZodOptional<z.ZodArray<z.ZodString>>;
3333
+ schedules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2948
3334
  requiredSettings: z.ZodArray<z.ZodString>;
2949
3335
  secretSettings: z.ZodArray<z.ZodString>;
2950
3336
  }, z.core.$strip>;
@@ -3002,6 +3388,17 @@ export declare const devStoreSchema: z.ZodObject<{
3002
3388
  createdAt: z.ZodString;
3003
3389
  }, z.core.$strip>;
3004
3390
  export type DevStore = z.infer<typeof devStoreSchema>;
3391
+ /** `GET /platform/v1/developer/stores` — 비공개 앱을 묶을 수 있는 상점(내가 소유자·관리자, 운영 중) */
3392
+ export declare const developerStoreSchema: z.ZodObject<{
3393
+ storeId: z.ZodString;
3394
+ name: z.ZodString;
3395
+ role: z.ZodEnum<{
3396
+ ADMIN: "ADMIN";
3397
+ OWNER: "OWNER";
3398
+ }>;
3399
+ development: z.ZodBoolean;
3400
+ }, z.core.$strip>;
3401
+ export type DeveloperStore = z.infer<typeof developerStoreSchema>;
3005
3402
  /** 개발자가 보는 설치 한 줄 */
3006
3403
  export declare const developerInstallationSchema: z.ZodObject<{
3007
3404
  installationId: z.ZodString;
@@ -3034,8 +3431,10 @@ export declare const appInvocationSchema: z.ZodObject<{
3034
3431
  versionNumber: z.ZodNullable<z.ZodNumber>;
3035
3432
  kind: z.ZodEnum<{
3036
3433
  event: "event";
3434
+ flow: "flow";
3037
3435
  http: "http";
3038
3436
  schedule: "schedule";
3437
+ tool: "tool";
3039
3438
  }>;
3040
3439
  eventType: z.ZodNullable<z.ZodString>;
3041
3440
  outcome: z.ZodEnum<{
@@ -13292,9 +13691,10 @@ export declare function createStoreClient(options: StoreClientOptions): {
13292
13691
  }>;
13293
13692
  /**
13294
13693
  * `POST /order-items/{id}/events/{key}` — 현장 단말·연동의 상점 사건(`custom.<이름>`)을 플로우에 넣는다(#115).
13295
- * 에러: 400 `FLOW_EVENT_KEY_INVALID`, 409 `FLOW_EVENT_NOT_ACCEPTED`
13694
+ * 앱 사건(`app.<handle>.<이름>`, #22)은 그 앱의 설치 토큰으로만 보낸다(`ctx.api`).
13695
+ * 에러: 400 `FLOW_EVENT_KEY_INVALID`, 403 `FLOW_EVENT_APP_FORBIDDEN`, 409 `FLOW_EVENT_NOT_ACCEPTED`
13296
13696
  */
13297
- emitEvent: (orderItemId: string, key: `custom.${string}`, input?: Record<string, unknown>, idempotencyKey?: string) => Promise<{
13697
+ emitEvent: (orderItemId: string, key: `custom.${string}` | `app.${string}`, input?: Record<string, unknown>, idempotencyKey?: string) => Promise<{
13298
13698
  status: "COMPLETED";
13299
13699
  flowState: {
13300
13700
  key: string;
@@ -15896,6 +16296,28 @@ export declare function createStoreClient(options: StoreClientOptions): {
15896
16296
  }>;
15897
16297
  };
15898
16298
  /** 설치 앱(#22, 매뉴얼 「앱 설치와 관리 › 관리 API」) — 설치·설정·제거·세션은 상점 플랫폼 OWNER·ADMIN만 */
16299
+ /** 에이전트 도구(#22 「에이전트 도구」) — 설치된 앱이 제공하는 도구 목록·실행. 실행은 OWNER·ADMIN */
16300
+ appTools: {
16301
+ list: () => Promise<{
16302
+ installationId: string;
16303
+ app: {
16304
+ appId: string;
16305
+ handle: string;
16306
+ name: string;
16307
+ };
16308
+ name: string;
16309
+ description: string;
16310
+ input: {
16311
+ name: string;
16312
+ type: "string" | "number" | "boolean";
16313
+ description: string | null;
16314
+ required: boolean;
16315
+ }[];
16316
+ }[]>;
16317
+ call: (installationId: string, name: string, input?: Record<string, unknown>) => Promise<{
16318
+ result: unknown;
16319
+ }>;
16320
+ };
15899
16321
  apps: {
15900
16322
  /** 이 상점에 설치할 수 있는 앱 — 앱 목록·상세(아이콘·README·Scope·Hook·설정 필드) */
15901
16323
  catalog: {
@@ -15908,6 +16330,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
15908
16330
  developerName: string;
15909
16331
  versionNumber: number;
15910
16332
  installationId: string | null;
16333
+ visibility: "PUBLIC" | "DEVELOPMENT" | "PRIVATE";
15911
16334
  }[]>;
15912
16335
  get: (appId: string) => Promise<{
15913
16336
  appId: string;
@@ -15918,11 +16341,22 @@ export declare function createStoreClient(options: StoreClientOptions): {
15918
16341
  developerName: string;
15919
16342
  versionNumber: number;
15920
16343
  installationId: string | null;
16344
+ visibility: "PUBLIC" | "DEVELOPMENT" | "PRIVATE";
15921
16345
  readme: string | null;
15922
16346
  supportEmail: string | null;
15923
16347
  scopes: string[];
15924
16348
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
15925
16349
  networkHosts: string[];
16350
+ publicHttp: string[];
16351
+ schedules: {
16352
+ name: string;
16353
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16354
+ }[];
16355
+ tools: {
16356
+ name: string;
16357
+ description: string;
16358
+ }[];
16359
+ externalHost: string | null;
15926
16360
  settings: Record<string, {
15927
16361
  type: "string" | "number" | "boolean" | "select";
15928
16362
  label: string;
@@ -15967,6 +16401,30 @@ export declare function createStoreClient(options: StoreClientOptions): {
15967
16401
  grantedNetworkHosts: string[];
15968
16402
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
15969
16403
  adminPage: boolean;
16404
+ publicHttp: string[];
16405
+ schedules: {
16406
+ name: string;
16407
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16408
+ }[];
16409
+ tools: {
16410
+ name: string;
16411
+ description: string;
16412
+ }[];
16413
+ externalHost: string | null;
16414
+ flowNotifications: {
16415
+ name: string;
16416
+ label: string;
16417
+ params: {
16418
+ name: string;
16419
+ type: "string" | "number" | "boolean";
16420
+ label: string;
16421
+ required: boolean;
16422
+ }[];
16423
+ }[];
16424
+ flowEvents: {
16425
+ name: string;
16426
+ label: string;
16427
+ }[];
15970
16428
  settings: {
15971
16429
  fields: Record<string, {
15972
16430
  type: "string" | "number" | "boolean" | "select";
@@ -15996,6 +16454,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
15996
16454
  scopes: string[];
15997
16455
  networkHosts: string[];
15998
16456
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16457
+ publicHttp: string[];
16458
+ schedules: {
16459
+ name: string;
16460
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16461
+ }[];
16462
+ tools: {
16463
+ name: string;
16464
+ description: string;
16465
+ }[];
16466
+ externalHost: string | null;
15999
16467
  } | null | undefined;
16000
16468
  }>;
16001
16469
  list: () => Promise<{
@@ -16020,6 +16488,30 @@ export declare function createStoreClient(options: StoreClientOptions): {
16020
16488
  grantedNetworkHosts: string[];
16021
16489
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16022
16490
  adminPage: boolean;
16491
+ publicHttp: string[];
16492
+ schedules: {
16493
+ name: string;
16494
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16495
+ }[];
16496
+ tools: {
16497
+ name: string;
16498
+ description: string;
16499
+ }[];
16500
+ externalHost: string | null;
16501
+ flowNotifications: {
16502
+ name: string;
16503
+ label: string;
16504
+ params: {
16505
+ name: string;
16506
+ type: "string" | "number" | "boolean";
16507
+ label: string;
16508
+ required: boolean;
16509
+ }[];
16510
+ }[];
16511
+ flowEvents: {
16512
+ name: string;
16513
+ label: string;
16514
+ }[];
16023
16515
  settings: {
16024
16516
  fields: Record<string, {
16025
16517
  type: "string" | "number" | "boolean" | "select";
@@ -16049,6 +16541,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
16049
16541
  scopes: string[];
16050
16542
  networkHosts: string[];
16051
16543
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16544
+ publicHttp: string[];
16545
+ schedules: {
16546
+ name: string;
16547
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16548
+ }[];
16549
+ tools: {
16550
+ name: string;
16551
+ description: string;
16552
+ }[];
16553
+ externalHost: string | null;
16052
16554
  } | null | undefined;
16053
16555
  }[]>;
16054
16556
  get: (installationId: string) => Promise<{
@@ -16073,6 +16575,30 @@ export declare function createStoreClient(options: StoreClientOptions): {
16073
16575
  grantedNetworkHosts: string[];
16074
16576
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16075
16577
  adminPage: boolean;
16578
+ publicHttp: string[];
16579
+ schedules: {
16580
+ name: string;
16581
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16582
+ }[];
16583
+ tools: {
16584
+ name: string;
16585
+ description: string;
16586
+ }[];
16587
+ externalHost: string | null;
16588
+ flowNotifications: {
16589
+ name: string;
16590
+ label: string;
16591
+ params: {
16592
+ name: string;
16593
+ type: "string" | "number" | "boolean";
16594
+ label: string;
16595
+ required: boolean;
16596
+ }[];
16597
+ }[];
16598
+ flowEvents: {
16599
+ name: string;
16600
+ label: string;
16601
+ }[];
16076
16602
  settings: {
16077
16603
  fields: Record<string, {
16078
16604
  type: "string" | "number" | "boolean" | "select";
@@ -16102,6 +16628,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
16102
16628
  scopes: string[];
16103
16629
  networkHosts: string[];
16104
16630
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16631
+ publicHttp: string[];
16632
+ schedules: {
16633
+ name: string;
16634
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16635
+ }[];
16636
+ tools: {
16637
+ name: string;
16638
+ description: string;
16639
+ }[];
16640
+ externalHost: string | null;
16105
16641
  } | null | undefined;
16106
16642
  }>;
16107
16643
  /** 비밀 필드를 생략하면 현재 값을 유지한다. null은 비운다 */
@@ -16127,6 +16663,30 @@ export declare function createStoreClient(options: StoreClientOptions): {
16127
16663
  grantedNetworkHosts: string[];
16128
16664
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16129
16665
  adminPage: boolean;
16666
+ publicHttp: string[];
16667
+ schedules: {
16668
+ name: string;
16669
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16670
+ }[];
16671
+ tools: {
16672
+ name: string;
16673
+ description: string;
16674
+ }[];
16675
+ externalHost: string | null;
16676
+ flowNotifications: {
16677
+ name: string;
16678
+ label: string;
16679
+ params: {
16680
+ name: string;
16681
+ type: "string" | "number" | "boolean";
16682
+ label: string;
16683
+ required: boolean;
16684
+ }[];
16685
+ }[];
16686
+ flowEvents: {
16687
+ name: string;
16688
+ label: string;
16689
+ }[];
16130
16690
  settings: {
16131
16691
  fields: Record<string, {
16132
16692
  type: "string" | "number" | "boolean" | "select";
@@ -16156,6 +16716,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
16156
16716
  scopes: string[];
16157
16717
  networkHosts: string[];
16158
16718
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16719
+ publicHttp: string[];
16720
+ schedules: {
16721
+ name: string;
16722
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16723
+ }[];
16724
+ tools: {
16725
+ name: string;
16726
+ description: string;
16727
+ }[];
16728
+ externalHost: string | null;
16159
16729
  } | null | undefined;
16160
16730
  }>;
16161
16731
  remove: (installationId: string) => Promise<void>;
@@ -16196,6 +16766,30 @@ export declare function createStoreClient(options: StoreClientOptions): {
16196
16766
  grantedNetworkHosts: string[];
16197
16767
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16198
16768
  adminPage: boolean;
16769
+ publicHttp: string[];
16770
+ schedules: {
16771
+ name: string;
16772
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16773
+ }[];
16774
+ tools: {
16775
+ name: string;
16776
+ description: string;
16777
+ }[];
16778
+ externalHost: string | null;
16779
+ flowNotifications: {
16780
+ name: string;
16781
+ label: string;
16782
+ params: {
16783
+ name: string;
16784
+ type: "string" | "number" | "boolean";
16785
+ label: string;
16786
+ required: boolean;
16787
+ }[];
16788
+ }[];
16789
+ flowEvents: {
16790
+ name: string;
16791
+ label: string;
16792
+ }[];
16199
16793
  settings: {
16200
16794
  fields: Record<string, {
16201
16795
  type: "string" | "number" | "boolean" | "select";
@@ -16225,6 +16819,16 @@ export declare function createStoreClient(options: StoreClientOptions): {
16225
16819
  scopes: string[];
16226
16820
  networkHosts: string[];
16227
16821
  events: ("ORDER.PAID" | "ORDER.CONFIRMED" | "ORDER.DISPATCHED" | "ORDER.DELIVERED" | "ORDER.PURCHASE_DECIDED" | "ORDER.ADDRESS_CHANGE_REQUESTED" | "ORDER.CANCELED" | "ORDER.FULFILLED" | "CLAIM.CANCEL_REQUESTED" | "CLAIM.RETURN_REQUESTED" | "CLAIM.EXCHANGE_REQUESTED" | "CLAIM.COMPLETED" | "INQUIRY.CREATED" | "REVIEW.CREATED" | "PRODUCT.OUT_OF_STOCK" | "ORDER.FLOW_NOTIFICATION" | "ORDER.FLOW_STATE_CHANGED" | "APP.INSTALLED" | "APP.UNINSTALLED" | "APP.SETTINGS_UPDATED" | "APP.SCOPES_UPDATED" | "APP.STORE_REDACT" | "APP.CUSTOMER_REDACT")[];
16822
+ publicHttp: string[];
16823
+ schedules: {
16824
+ name: string;
16825
+ every: "15m" | "30m" | "1h" | "3h" | "6h" | "12h" | "1d";
16826
+ }[];
16827
+ tools: {
16828
+ name: string;
16829
+ description: string;
16830
+ }[];
16831
+ externalHost: string | null;
16228
16832
  } | null | undefined;
16229
16833
  }>;
16230
16834
  /** 앱 화면 iframe에 넘길 세션 토큰(5분) */
@@ -16246,6 +16850,25 @@ export declare function createStoreClient(options: StoreClientOptions): {
16246
16850
  grantedScopes: string[];
16247
16851
  installedAt: string;
16248
16852
  }>;
16853
+ /** 설치 저장소(`ctx.storage`) — 없는 키는 404 `APP_STORAGE_KEY_NOT_FOUND`, 한도 초과는 409 `APP_STORAGE_LIMIT` */
16854
+ storage: {
16855
+ list: (params?: {
16856
+ prefix?: string;
16857
+ }) => Promise<{
16858
+ keys: string[];
16859
+ }>;
16860
+ get: (key: string) => Promise<{
16861
+ key: string;
16862
+ value: unknown;
16863
+ updatedAt: string;
16864
+ }>;
16865
+ set: (key: string, value: unknown) => Promise<{
16866
+ key: string;
16867
+ value: unknown;
16868
+ updatedAt: string;
16869
+ }>;
16870
+ delete: (key: string) => Promise<void>;
16871
+ };
16249
16872
  };
16250
16873
  webhooks: {
16251
16874
  list: () => Promise<{