@sayren/store-sdk 0.18.0 → 0.19.0

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
@@ -165,8 +165,8 @@ export declare const auditLogPageSchema: z.ZodObject<{
165
165
  }, z.core.$strip>;
166
166
  export type AuditLogPage = z.infer<typeof auditLogPageSchema>;
167
167
  export declare const agentPolicyDecisionSchema: z.ZodEnum<{
168
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
169
168
  DENIED: "DENIED";
169
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
170
170
  ALLOW: "ALLOW";
171
171
  }>;
172
172
  export type AgentPolicyDecision = z.infer<typeof agentPolicyDecisionSchema>;
@@ -190,8 +190,8 @@ export type WritePreview = z.infer<typeof writePreviewSchema>;
190
190
  export declare const writeDryRunResultSchema: z.ZodObject<{
191
191
  dryRun: z.ZodLiteral<true>;
192
192
  decision: z.ZodEnum<{
193
- APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
194
193
  DENIED: "DENIED";
194
+ APPROVAL_REQUIRED: "APPROVAL_REQUIRED";
195
195
  ALLOW: "ALLOW";
196
196
  }>;
197
197
  reason: z.ZodNullable<z.ZodString>;
@@ -921,8 +921,8 @@ export declare const oauthClientRegistrationRequestSchema: z.ZodObject<{
921
921
  }>>;
922
922
  redirect_uris: z.ZodOptional<z.ZodArray<z.ZodString>>;
923
923
  grant_types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
924
- refresh_token: "refresh_token";
925
924
  authorization_code: "authorization_code";
925
+ refresh_token: "refresh_token";
926
926
  client_credentials: "client_credentials";
927
927
  "urn:ietf:params:oauth:grant-type:token-exchange": "urn:ietf:params:oauth:grant-type:token-exchange";
928
928
  }>>>;
@@ -1073,9 +1073,9 @@ export type ApiLogSummary = z.infer<typeof apiLogSummarySchema>;
1073
1073
  //#endregion
1074
1074
  //#region src/schemas/auth.d.ts
1075
1075
  export declare const storeRoleSchema: z.ZodEnum<{
1076
- OWNER: "OWNER";
1077
1076
  ADMIN: "ADMIN";
1078
1077
  STAFF: "STAFF";
1078
+ OWNER: "OWNER";
1079
1079
  }>;
1080
1080
  export type StoreRole = z.infer<typeof storeRoleSchema>;
1081
1081
  export declare const userTokenResponseSchema: z.ZodObject<{
@@ -1099,9 +1099,9 @@ export declare const storeTokenResponseSchema: z.ZodObject<{
1099
1099
  expires_in: z.ZodNumber;
1100
1100
  storeId: z.ZodString;
1101
1101
  role: z.ZodEnum<{
1102
- OWNER: "OWNER";
1103
1102
  ADMIN: "ADMIN";
1104
1103
  STAFF: "STAFF";
1104
+ OWNER: "OWNER";
1105
1105
  }>;
1106
1106
  scopes: z.ZodArray<z.ZodString>;
1107
1107
  }, z.core.$strip>;
@@ -1111,9 +1111,9 @@ export declare const myStoreSchema: z.ZodObject<{
1111
1111
  storeName: z.ZodString;
1112
1112
  storeCode: z.ZodString;
1113
1113
  role: z.ZodEnum<{
1114
- OWNER: "OWNER";
1115
1114
  ADMIN: "ADMIN";
1116
1115
  STAFF: "STAFF";
1116
+ OWNER: "OWNER";
1117
1117
  }>;
1118
1118
  status: z.ZodEnum<{
1119
1119
  ACTIVE: "ACTIVE";
@@ -5322,20 +5322,20 @@ export interface PaymentListParams extends PageParams {
5322
5322
  //#endregion
5323
5323
  //#region src/schemas/product.d.ts
5324
5324
  export declare const productStatusSchema: z.ZodEnum<{
5325
- SUSPENDED: "SUSPENDED";
5326
- CLOSED: "CLOSED";
5327
5325
  SALE: "SALE";
5326
+ SUSPENDED: "SUSPENDED";
5328
5327
  OUT_OF_STOCK: "OUT_OF_STOCK";
5328
+ CLOSED: "CLOSED";
5329
5329
  }>;
5330
5330
  export type ProductStatus = z.infer<typeof productStatusSchema>;
5331
5331
  export declare const productSummarySchema: z.ZodObject<{
5332
5332
  productId: z.ZodString;
5333
5333
  name: z.ZodString;
5334
5334
  status: z.ZodEnum<{
5335
- SUSPENDED: "SUSPENDED";
5336
- CLOSED: "CLOSED";
5337
5335
  SALE: "SALE";
5336
+ SUSPENDED: "SUSPENDED";
5338
5337
  OUT_OF_STOCK: "OUT_OF_STOCK";
5338
+ CLOSED: "CLOSED";
5339
5339
  }>;
5340
5340
  salePrice: z.ZodNumber;
5341
5341
  discountedPrice: z.ZodNullable<z.ZodNumber>;
@@ -5402,10 +5402,10 @@ export declare const productSchema: z.ZodObject<{
5402
5402
  productId: z.ZodString;
5403
5403
  name: z.ZodString;
5404
5404
  status: z.ZodEnum<{
5405
- SUSPENDED: "SUSPENDED";
5406
- CLOSED: "CLOSED";
5407
5405
  SALE: "SALE";
5406
+ SUSPENDED: "SUSPENDED";
5408
5407
  OUT_OF_STOCK: "OUT_OF_STOCK";
5408
+ CLOSED: "CLOSED";
5409
5409
  }>;
5410
5410
  salePrice: z.ZodNumber;
5411
5411
  discountedPrice: z.ZodNullable<z.ZodNumber>;
@@ -5824,10 +5824,10 @@ export declare const productPatchRequestSchema: z.ZodObject<{
5824
5824
  name: z.ZodOptional<z.ZodString>;
5825
5825
  salePrice: z.ZodOptional<z.ZodNumber>;
5826
5826
  status: z.ZodOptional<z.ZodEnum<{
5827
- SUSPENDED: "SUSPENDED";
5828
- CLOSED: "CLOSED";
5829
5827
  SALE: "SALE";
5828
+ SUSPENDED: "SUSPENDED";
5830
5829
  OUT_OF_STOCK: "OUT_OF_STOCK";
5830
+ CLOSED: "CLOSED";
5831
5831
  }>>;
5832
5832
  fulfillment: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
5833
5833
  type: z.ZodLiteral<"SHIPPING">;
@@ -5902,10 +5902,10 @@ export declare const productListQuerySchema: z.ZodObject<{
5902
5902
  page: z.ZodOptional<z.ZodString>;
5903
5903
  size: z.ZodOptional<z.ZodString>;
5904
5904
  status: z.ZodOptional<z.ZodEnum<{
5905
- SUSPENDED: "SUSPENDED";
5906
- CLOSED: "CLOSED";
5907
5905
  SALE: "SALE";
5906
+ SUSPENDED: "SUSPENDED";
5908
5907
  OUT_OF_STOCK: "OUT_OF_STOCK";
5908
+ CLOSED: "CLOSED";
5909
5909
  }>>;
5910
5910
  categoryId: z.ZodOptional<z.ZodString>;
5911
5911
  keyword: z.ZodOptional<z.ZodString>;
@@ -6042,9 +6042,9 @@ export declare const storeMemberSchema: z.ZodObject<{
6042
6042
  name: z.ZodString;
6043
6043
  email: z.ZodEmail;
6044
6044
  role: z.ZodEnum<{
6045
- OWNER: "OWNER";
6046
6045
  ADMIN: "ADMIN";
6047
6046
  STAFF: "STAFF";
6047
+ OWNER: "OWNER";
6048
6048
  }>;
6049
6049
  joinedAt: z.ZodString;
6050
6050
  lastActiveAt: z.ZodNullable<z.ZodString>;
@@ -6174,6 +6174,331 @@ export declare const sellerAddressRequestSchema: z.ZodObject<{
6174
6174
  }, z.core.$strip>;
6175
6175
  export type SellerAddressRequest = z.infer<typeof sellerAddressRequestSchema>;
6176
6176
  //#endregion
6177
+ //#region src/schemas/storefront-hosting.d.ts
6178
+ /**
6179
+ * 스토어프론트 호스팅 (이슈 #53, M1: 템플릿 발행) — 관리 API `/v1/storefront/**`의 계약이다.
6180
+ *
6181
+ * 셀러는 템플릿을 골라 사이트를 만들고 `{slug}.{호스팅 도메인}` 주소를 받는다. 발행은 버전 단위이고,
6182
+ * 되돌리기는 이전 버전을 다시 발행하는 것이다(재빌드 없음). 상태의 원천은 api DB이고 Cloudflare 쪽 반영
6183
+ * (라우팅 표·사이트 Worker)은 커밋 뒤 비동기다 — 반영 상태는 `provisioning`으로 본다.
6184
+ *
6185
+ * 스코프는 조회 `storefront:r`, 쓰기 `storefront:rw`(역할 OWNER·ADMIN)다. 에이전트(MCP)의 발행·되돌리기·템플릿 변경·
6186
+ * 공개 전환·슬러그 변경·호스팅 끄기는 승인(`APPROVAL_REQUIRED`)이다 — 구매자가 보는 화면을 바꾸는 쓰기다.
6187
+ *
6188
+ * 오류 코드:
6189
+ * - 403 `STOREFRONT_HOSTING_DISABLED` — 플랫폼 스위치가 꺼져 새 사이트를 만들 수 없다
6190
+ * - 404 `STOREFRONT_SITE_NOT_FOUND` · `STOREFRONT_TEMPLATE_NOT_FOUND` · `STOREFRONT_VERSION_NOT_FOUND`
6191
+ * - 409 `STOREFRONT_SITE_EXISTS` — 이미 사이트가 있다(스토어당 1개)
6192
+ * - 409 `STOREFRONT_SLUG_TAKEN` — 다른 사이트가 쓰거나 보류 중인 슬러그다
6193
+ * - 409 `STOREFRONT_SLUG_CHANGE_LIMIT` — 슬러그는 스토어당 30일에 3번까지 바꾼다
6194
+ * - 409 `STOREFRONT_SITE_CREATE_LIMIT` — 사이트는 스토어당 30일에 3번까지 만든다
6195
+ * - 409 `STOREFRONT_SITE_CHANGED` — 읽은 상태(`expected*`)와 현재 상태가 다르다. 다시 읽고 시도한다
6196
+ * - 409 `STOREFRONT_SITE_NOT_ACTIVE` — 정지(`SUSPENDED`)된 사이트는 바꾸거나 끌 수 없다
6197
+ * - 409 `STOREFRONT_VERSION_NOT_READY` — 빌드가 끝나지 않았거나 실패한 버전은 발행할 수 없다
6198
+ * - 409 `STOREFRONT_NO_ROLLBACK_TARGET` — 되돌릴 이전 발행 버전이 없다
6199
+ * - 400 `STOREFRONT_SLUG_CONFIRM_MISMATCH` — 호스팅 끄기 확인 입력이 현재 슬러그와 다르다
6200
+ * - 503 `STOREFRONT_PREVIEW_NOT_CONFIGURED` — 미리보기 서명 키가 설정되지 않았다
6201
+ */
6202
+ /**
6203
+ * 슬러그 형식 — 스토어 코드와 같은 DNS 라벨 규칙(소문자·숫자·하이픈 3~30자, 하이픈으로 시작·끝 불가)에
6204
+ * 연속 하이픈 금지를 더한다. `--`는 버전 미리보기 주소(`v3--{slug}`)와 punycode(`xn--`)가 쓰는 구분자다.
6205
+ */
6206
+ export declare const STOREFRONT_SLUG_PATTERN: RegExp;
6207
+ /** 호스팅 도메인에서 플랫폼이 쓰거나 쓸 이름 — 스토어 코드 예약어에 호스팅 전용 이름을 더한다 */
6208
+ export declare const RESERVED_STOREFRONT_SLUGS: readonly string[];
6209
+ export declare function isReservedStorefrontSlug(slug: string): boolean;
6210
+ export declare const storefrontSlugSchema: z.ZodString;
6211
+ /** 바꾼 슬러그를 다른 사이트가 가져가지 못하게 막는 기간(일). 보류 동안 옛 주소는 새 주소로 301한다 */
6212
+ export declare const STOREFRONT_SLUG_HOLD_DAYS = 90;
6213
+ /** 슬러그 변경 한도 — 이 기간(일) 안에 */
6214
+ export declare const STOREFRONT_SLUG_CHANGE_WINDOW_DAYS = 30;
6215
+ /** 슬러그 변경 한도 — 횟수(스토어 단위. 끄고 다시 만들어도 이어서 센다) */
6216
+ export declare const STOREFRONT_SLUG_CHANGE_LIMIT = 3;
6217
+ /** 사이트 만들기 한도 — 같은 창(30일) 안의 횟수(스토어 단위). 끄고 만들기를 되풀이해 이름을 묶어 두지 못하게 한다 */
6218
+ export declare const STOREFRONT_SITE_CREATE_LIMIT = 3;
6219
+ export declare const storefrontTemplateSchema: z.ZodObject<{
6220
+ templateId: z.ZodString;
6221
+ name: z.ZodString;
6222
+ industry: z.ZodString;
6223
+ description: z.ZodString;
6224
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
6225
+ version: z.ZodString;
6226
+ isDefault: z.ZodBoolean;
6227
+ }, z.core.$strip>;
6228
+ export type StorefrontTemplate = z.infer<typeof storefrontTemplateSchema>;
6229
+ /**
6230
+ * 버전 상태 — M1은 템플릿 빌드 산출물을 그대로 쓰므로 만들 때 곧바로 `READY`다. `BUILDING`·`FAILED`는
6231
+ * 셀러 편집 빌드(M2)가 쓴다. 발행 여부는 상태가 아니라 사이트의 발행 포인터가 원천이다(`published`).
6232
+ */
6233
+ export declare const storefrontVersionStatusSchema: z.ZodEnum<{
6234
+ FAILED: "FAILED";
6235
+ BUILDING: "BUILDING";
6236
+ READY: "READY";
6237
+ }>;
6238
+ export type StorefrontVersionStatus = z.infer<typeof storefrontVersionStatusSchema>;
6239
+ export declare const storefrontVersionSchema: z.ZodObject<{
6240
+ versionId: z.ZodString;
6241
+ number: z.ZodNumber;
6242
+ templateId: z.ZodString;
6243
+ templateVersion: z.ZodString;
6244
+ status: z.ZodEnum<{
6245
+ FAILED: "FAILED";
6246
+ BUILDING: "BUILDING";
6247
+ READY: "READY";
6248
+ }>;
6249
+ published: z.ZodBoolean;
6250
+ publishedAt: z.ZodNullable<z.ZodString>;
6251
+ message: z.ZodNullable<z.ZodString>;
6252
+ createdByType: z.ZodString;
6253
+ createdAt: z.ZodString;
6254
+ }, z.core.$strip>;
6255
+ export type StorefrontVersion = z.infer<typeof storefrontVersionSchema>;
6256
+ export declare const storefrontSiteStatusSchema: z.ZodEnum<{
6257
+ ACTIVE: "ACTIVE";
6258
+ SUSPENDED: "SUSPENDED";
6259
+ CLOSED: "CLOSED";
6260
+ }>;
6261
+ export type StorefrontSiteStatus = z.infer<typeof storefrontSiteStatusSchema>;
6262
+ export declare const storefrontVisibilitySchema: z.ZodEnum<{
6263
+ COMING_SOON: "COMING_SOON";
6264
+ PUBLIC: "PUBLIC";
6265
+ }>;
6266
+ export type StorefrontVisibility = z.infer<typeof storefrontVisibilitySchema>;
6267
+ export declare const storefrontSourceModeSchema: z.ZodEnum<{
6268
+ CUSTOM: "CUSTOM";
6269
+ MANAGED: "MANAGED";
6270
+ }>;
6271
+ export declare const storefrontDomainSchema: z.ZodObject<{
6272
+ hostname: z.ZodString;
6273
+ kind: z.ZodEnum<{
6274
+ PLATFORM: "PLATFORM";
6275
+ CUSTOM: "CUSTOM";
6276
+ }>;
6277
+ status: z.ZodEnum<{
6278
+ ACTIVE: "ACTIVE";
6279
+ HELD: "HELD";
6280
+ }>;
6281
+ isPrimary: z.ZodBoolean;
6282
+ holdUntil: z.ZodNullable<z.ZodString>;
6283
+ }, z.core.$strip>;
6284
+ export type StorefrontDomain = z.infer<typeof storefrontDomainSchema>;
6285
+ /**
6286
+ * 호스팅 반영 상태 — 발행·슬러그·공개 전환은 DB에 먼저 확정되고 Cloudflare 반영은 커밋 뒤에 한다.
6287
+ * `PENDING`이면 반영 중이거나 재시도 대기다(잡이 다시 한다). 반영 뒤에도 라우팅 전파에 최대 1분이 걸린다.
6288
+ */
6289
+ export declare const storefrontProvisioningSchema: z.ZodObject<{
6290
+ status: z.ZodEnum<{
6291
+ PENDING: "PENDING";
6292
+ FAILED: "FAILED";
6293
+ SYNCED: "SYNCED";
6294
+ }>;
6295
+ lastErrorCode: z.ZodNullable<z.ZodString>;
6296
+ syncedAt: z.ZodNullable<z.ZodString>;
6297
+ }, z.core.$strip>;
6298
+ export type StorefrontProvisioning = z.infer<typeof storefrontProvisioningSchema>;
6299
+ export declare const storefrontSiteSchema: z.ZodObject<{
6300
+ siteId: z.ZodString;
6301
+ slug: z.ZodString;
6302
+ hostname: z.ZodString;
6303
+ url: z.ZodString;
6304
+ domains: z.ZodArray<z.ZodObject<{
6305
+ hostname: z.ZodString;
6306
+ kind: z.ZodEnum<{
6307
+ PLATFORM: "PLATFORM";
6308
+ CUSTOM: "CUSTOM";
6309
+ }>;
6310
+ status: z.ZodEnum<{
6311
+ ACTIVE: "ACTIVE";
6312
+ HELD: "HELD";
6313
+ }>;
6314
+ isPrimary: z.ZodBoolean;
6315
+ holdUntil: z.ZodNullable<z.ZodString>;
6316
+ }, z.core.$strip>>;
6317
+ templateId: z.ZodString;
6318
+ sourceMode: z.ZodEnum<{
6319
+ CUSTOM: "CUSTOM";
6320
+ MANAGED: "MANAGED";
6321
+ }>;
6322
+ status: z.ZodEnum<{
6323
+ ACTIVE: "ACTIVE";
6324
+ SUSPENDED: "SUSPENDED";
6325
+ CLOSED: "CLOSED";
6326
+ }>;
6327
+ visibility: z.ZodEnum<{
6328
+ COMING_SOON: "COMING_SOON";
6329
+ PUBLIC: "PUBLIC";
6330
+ }>;
6331
+ publishedVersion: z.ZodNullable<z.ZodObject<{
6332
+ versionId: z.ZodString;
6333
+ number: z.ZodNumber;
6334
+ templateId: z.ZodString;
6335
+ templateVersion: z.ZodString;
6336
+ status: z.ZodEnum<{
6337
+ FAILED: "FAILED";
6338
+ BUILDING: "BUILDING";
6339
+ READY: "READY";
6340
+ }>;
6341
+ published: z.ZodBoolean;
6342
+ publishedAt: z.ZodNullable<z.ZodString>;
6343
+ message: z.ZodNullable<z.ZodString>;
6344
+ createdByType: z.ZodString;
6345
+ createdAt: z.ZodString;
6346
+ }, z.core.$strip>>;
6347
+ provisioning: z.ZodObject<{
6348
+ status: z.ZodEnum<{
6349
+ PENDING: "PENDING";
6350
+ FAILED: "FAILED";
6351
+ SYNCED: "SYNCED";
6352
+ }>;
6353
+ lastErrorCode: z.ZodNullable<z.ZodString>;
6354
+ syncedAt: z.ZodNullable<z.ZodString>;
6355
+ }, z.core.$strip>;
6356
+ slugChangesRemaining: z.ZodNumber;
6357
+ createdAt: z.ZodString;
6358
+ updatedAt: z.ZodString;
6359
+ }, z.core.$strip>;
6360
+ export type StorefrontSite = z.infer<typeof storefrontSiteSchema>;
6361
+ /** `GET /v1/storefront/site` — 스위치 상태와 현재 사이트(없으면 null. 끈 사이트는 싣지 않는다) */
6362
+ export declare const storefrontHostingSchema: z.ZodObject<{
6363
+ enabled: z.ZodBoolean;
6364
+ domain: z.ZodString;
6365
+ site: z.ZodNullable<z.ZodObject<{
6366
+ siteId: z.ZodString;
6367
+ slug: z.ZodString;
6368
+ hostname: z.ZodString;
6369
+ url: z.ZodString;
6370
+ domains: z.ZodArray<z.ZodObject<{
6371
+ hostname: z.ZodString;
6372
+ kind: z.ZodEnum<{
6373
+ PLATFORM: "PLATFORM";
6374
+ CUSTOM: "CUSTOM";
6375
+ }>;
6376
+ status: z.ZodEnum<{
6377
+ ACTIVE: "ACTIVE";
6378
+ HELD: "HELD";
6379
+ }>;
6380
+ isPrimary: z.ZodBoolean;
6381
+ holdUntil: z.ZodNullable<z.ZodString>;
6382
+ }, z.core.$strip>>;
6383
+ templateId: z.ZodString;
6384
+ sourceMode: z.ZodEnum<{
6385
+ CUSTOM: "CUSTOM";
6386
+ MANAGED: "MANAGED";
6387
+ }>;
6388
+ status: z.ZodEnum<{
6389
+ ACTIVE: "ACTIVE";
6390
+ SUSPENDED: "SUSPENDED";
6391
+ CLOSED: "CLOSED";
6392
+ }>;
6393
+ visibility: z.ZodEnum<{
6394
+ COMING_SOON: "COMING_SOON";
6395
+ PUBLIC: "PUBLIC";
6396
+ }>;
6397
+ publishedVersion: z.ZodNullable<z.ZodObject<{
6398
+ versionId: z.ZodString;
6399
+ number: z.ZodNumber;
6400
+ templateId: z.ZodString;
6401
+ templateVersion: z.ZodString;
6402
+ status: z.ZodEnum<{
6403
+ FAILED: "FAILED";
6404
+ BUILDING: "BUILDING";
6405
+ READY: "READY";
6406
+ }>;
6407
+ published: z.ZodBoolean;
6408
+ publishedAt: z.ZodNullable<z.ZodString>;
6409
+ message: z.ZodNullable<z.ZodString>;
6410
+ createdByType: z.ZodString;
6411
+ createdAt: z.ZodString;
6412
+ }, z.core.$strip>>;
6413
+ provisioning: z.ZodObject<{
6414
+ status: z.ZodEnum<{
6415
+ PENDING: "PENDING";
6416
+ FAILED: "FAILED";
6417
+ SYNCED: "SYNCED";
6418
+ }>;
6419
+ lastErrorCode: z.ZodNullable<z.ZodString>;
6420
+ syncedAt: z.ZodNullable<z.ZodString>;
6421
+ }, z.core.$strip>;
6422
+ slugChangesRemaining: z.ZodNumber;
6423
+ createdAt: z.ZodString;
6424
+ updatedAt: z.ZodString;
6425
+ }, z.core.$strip>>;
6426
+ }, z.core.$strip>;
6427
+ export type StorefrontHosting = z.infer<typeof storefrontHostingSchema>;
6428
+ export declare const storefrontSlugAvailabilitySchema: z.ZodObject<{
6429
+ slug: z.ZodString;
6430
+ available: z.ZodBoolean;
6431
+ reason: z.ZodNullable<z.ZodEnum<{
6432
+ RESERVED: "RESERVED";
6433
+ INVALID: "INVALID";
6434
+ TAKEN: "TAKEN";
6435
+ CURRENT: "CURRENT";
6436
+ }>>;
6437
+ }, z.core.$strip>;
6438
+ export type StorefrontSlugAvailability = z.infer<typeof storefrontSlugAvailabilitySchema>;
6439
+ export declare const createStorefrontSiteRequestSchema: z.ZodObject<{
6440
+ templateId: z.ZodString;
6441
+ slug: z.ZodOptional<z.ZodString>;
6442
+ }, z.core.$strip>;
6443
+ export type CreateStorefrontSiteRequest = z.infer<typeof createStorefrontSiteRequestSchema>;
6444
+ export declare const changeStorefrontTemplateRequestSchema: z.ZodObject<{
6445
+ templateId: z.ZodString;
6446
+ publish: z.ZodOptional<z.ZodBoolean>;
6447
+ message: z.ZodOptional<z.ZodString>;
6448
+ }, z.core.$strip>;
6449
+ export type ChangeStorefrontTemplateRequest = z.infer<typeof changeStorefrontTemplateRequestSchema>;
6450
+ /**
6451
+ * 발행·되돌리기 — 발행은 사이트의 발행 포인터를 바꾸는 조건부 쓰기다. `expectedPublishedVersionId`를 주면
6452
+ * 지금 발행 버전이 그 값일 때만 바꾼다(화면을 본 뒤 다른 사람이 바꿨으면 409 `STOREFRONT_SITE_CHANGED`).
6453
+ * 이미 그 버전이 발행돼 있으면 아무것도 바꾸지 않고 200이다(같은 요청의 재실행이 안전하다).
6454
+ */
6455
+ export declare const publishStorefrontVersionRequestSchema: z.ZodObject<{
6456
+ expectedPublishedVersionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6457
+ }, z.core.$strip>;
6458
+ export type PublishStorefrontVersionRequest = z.infer<typeof publishStorefrontVersionRequestSchema>;
6459
+ export declare const rollbackStorefrontRequestSchema: z.ZodObject<{
6460
+ versionId: z.ZodOptional<z.ZodString>;
6461
+ expectedPublishedVersionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6462
+ }, z.core.$strip>;
6463
+ export type RollbackStorefrontRequest = z.infer<typeof rollbackStorefrontRequestSchema>;
6464
+ export declare const changeStorefrontSlugRequestSchema: z.ZodObject<{
6465
+ slug: z.ZodString;
6466
+ }, z.core.$strip>;
6467
+ export type ChangeStorefrontSlugRequest = z.infer<typeof changeStorefrontSlugRequestSchema>;
6468
+ export declare const setStorefrontVisibilityRequestSchema: z.ZodObject<{
6469
+ visibility: z.ZodEnum<{
6470
+ COMING_SOON: "COMING_SOON";
6471
+ PUBLIC: "PUBLIC";
6472
+ }>;
6473
+ expectedVisibility: z.ZodOptional<z.ZodEnum<{
6474
+ COMING_SOON: "COMING_SOON";
6475
+ PUBLIC: "PUBLIC";
6476
+ }>>;
6477
+ }, z.core.$strip>;
6478
+ export type SetStorefrontVisibilityRequest = z.infer<typeof setStorefrontVisibilityRequestSchema>;
6479
+ /** 호스팅 끄기 — 사이트를 닫고(`CLOSED`) 슬러그를 보류한다. 확인 입력은 현재 슬러그다 */
6480
+ export declare const disableStorefrontHostingRequestSchema: z.ZodObject<{
6481
+ confirmSlug: z.ZodString;
6482
+ }, z.core.$strip>;
6483
+ export type DisableStorefrontHostingRequest = z.infer<typeof disableStorefrontHostingRequestSchema>;
6484
+ export declare const storefrontSlugAvailabilityQuerySchema: z.ZodObject<{
6485
+ slug: z.ZodString;
6486
+ }, z.core.$strip>;
6487
+ /**
6488
+ * 오픈 준비 중 미리보기 링크 — 콘솔에서 로그인한 OWNER·ADMIN만 받는다(PAT·에이전트 불가). 링크는 5분 안에 한 번 열면
6489
+ * 그 브라우저에 12시간짜리 미리보기 쿠키가 생기고 오픈 준비 중인 사이트의 실제 화면을 본다. 링크를 남에게 넘기면 그 사람도
6490
+ * 볼 수 있으므로 공유하지 않는다.
6491
+ */
6492
+ export declare const createStorefrontPreviewLinkRequestSchema: z.ZodObject<{
6493
+ path: z.ZodOptional<z.ZodString>;
6494
+ }, z.core.$strip>;
6495
+ export type CreateStorefrontPreviewLinkRequest = z.infer<typeof createStorefrontPreviewLinkRequestSchema>;
6496
+ export declare const storefrontPreviewLinkSchema: z.ZodObject<{
6497
+ url: z.ZodString;
6498
+ expiresAt: z.ZodString;
6499
+ }, z.core.$strip>;
6500
+ export type StorefrontPreviewLink = z.infer<typeof storefrontPreviewLinkSchema>;
6501
+ //#endregion
6177
6502
  //#region src/schemas/upload.d.ts
6178
6503
  /**
6179
6504
  * 업로드 용도. 허용 확장자와 크기 상한이 용도별로 다르다.
@@ -6382,7 +6707,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
6382
6707
  storeId: string;
6383
6708
  storeName: string;
6384
6709
  storeCode: string;
6385
- role: "OWNER" | "ADMIN" | "STAFF";
6710
+ role: "ADMIN" | "STAFF" | "OWNER";
6386
6711
  status: "ACTIVE" | "SUSPENDED" | "CLOSED";
6387
6712
  }[]>;
6388
6713
  /** RFC 7009 — token을 폐기한다 (public client는 client_id만 동반) */
@@ -6542,7 +6867,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
6542
6867
  contents: {
6543
6868
  productId: string;
6544
6869
  name: string;
6545
- status: "SUSPENDED" | "CLOSED" | "SALE" | "OUT_OF_STOCK";
6870
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
6546
6871
  salePrice: number;
6547
6872
  discountedPrice: number | null;
6548
6873
  stockQuantity: number;
@@ -6558,7 +6883,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
6558
6883
  get: (productId: string) => Promise<{
6559
6884
  productId: string;
6560
6885
  name: string;
6561
- status: "SUSPENDED" | "CLOSED" | "SALE" | "OUT_OF_STOCK";
6886
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
6562
6887
  salePrice: number;
6563
6888
  discountedPrice: number | null;
6564
6889
  stockQuantity: number;
@@ -6652,7 +6977,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
6652
6977
  create: (body: ProductCreateRequestInput, idempotencyKey?: string) => Promise<{
6653
6978
  productId: string;
6654
6979
  name: string;
6655
- status: "SUSPENDED" | "CLOSED" | "SALE" | "OUT_OF_STOCK";
6980
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
6656
6981
  salePrice: number;
6657
6982
  discountedPrice: number | null;
6658
6983
  stockQuantity: number;
@@ -6746,7 +7071,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
6746
7071
  update: (productId: string, body: ProductReplaceRequestInput) => Promise<{
6747
7072
  productId: string;
6748
7073
  name: string;
6749
- status: "SUSPENDED" | "CLOSED" | "SALE" | "OUT_OF_STOCK";
7074
+ status: "SALE" | "SUSPENDED" | "OUT_OF_STOCK" | "CLOSED";
6750
7075
  salePrice: number;
6751
7076
  discountedPrice: number | null;
6752
7077
  stockQuantity: number;
@@ -10231,6 +10556,358 @@ export declare function createStoreClient(options: StoreClientOptions): {
10231
10556
  remove: (addressId: string) => Promise<void>;
10232
10557
  setDefault: (addressId: string) => Promise<void>;
10233
10558
  };
10559
+ /**
10560
+ * 스토어프론트 호스팅 (이슈 #53) — 조회 `storefront:r`, 쓰기 `storefront:rw`(OWNER·ADMIN).
10561
+ * 쓰기 응답은 바뀐 사이트다. Cloudflare 반영은 커밋 뒤라 `provisioning.status`가 잠시 `PENDING`일 수 있다.
10562
+ * 에이전트 토큰의 발행·되돌리기·템플릿 변경·공개 전환·슬러그 변경·끄기는 승인 대기(`ApprovalPendingError`)다.
10563
+ */
10564
+ storefront: {
10565
+ /** `GET /v1/storefront/templates` — 템플릿 카탈로그 */
10566
+ listTemplates: () => Promise<{
10567
+ templateId: string;
10568
+ name: string;
10569
+ industry: string;
10570
+ description: string;
10571
+ thumbnailUrl: string | null;
10572
+ version: string;
10573
+ isDefault: boolean;
10574
+ }[]>;
10575
+ /** `GET /v1/storefront/site` — 스위치 상태와 현재 사이트(없으면 `site: null`) */
10576
+ get: () => Promise<{
10577
+ enabled: boolean;
10578
+ domain: string;
10579
+ site: {
10580
+ siteId: string;
10581
+ slug: string;
10582
+ hostname: string;
10583
+ url: string;
10584
+ domains: {
10585
+ hostname: string;
10586
+ kind: "PLATFORM" | "CUSTOM";
10587
+ status: "ACTIVE" | "HELD";
10588
+ isPrimary: boolean;
10589
+ holdUntil: string | null;
10590
+ }[];
10591
+ templateId: string;
10592
+ sourceMode: "CUSTOM" | "MANAGED";
10593
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10594
+ visibility: "COMING_SOON" | "PUBLIC";
10595
+ publishedVersion: {
10596
+ versionId: string;
10597
+ number: number;
10598
+ templateId: string;
10599
+ templateVersion: string;
10600
+ status: "FAILED" | "BUILDING" | "READY";
10601
+ published: boolean;
10602
+ publishedAt: string | null;
10603
+ message: string | null;
10604
+ createdByType: string;
10605
+ createdAt: string;
10606
+ } | null;
10607
+ provisioning: {
10608
+ status: "PENDING" | "FAILED" | "SYNCED";
10609
+ lastErrorCode: string | null;
10610
+ syncedAt: string | null;
10611
+ };
10612
+ slugChangesRemaining: number;
10613
+ createdAt: string;
10614
+ updatedAt: string;
10615
+ } | null;
10616
+ }>;
10617
+ /** `GET /v1/storefront/slug-availability?slug=` — 슬러그를 쓸 수 있는가 */
10618
+ checkSlug: (slug: string) => Promise<{
10619
+ slug: string;
10620
+ available: boolean;
10621
+ reason: "RESERVED" | "INVALID" | "TAKEN" | "CURRENT" | null;
10622
+ }>;
10623
+ /** `POST /v1/storefront/site` (201) — 템플릿으로 사이트를 만들고 v1을 발행한다. 공개 상태는 오픈 준비 중이다 */
10624
+ create: (body: CreateStorefrontSiteRequest) => Promise<{
10625
+ siteId: string;
10626
+ slug: string;
10627
+ hostname: string;
10628
+ url: string;
10629
+ domains: {
10630
+ hostname: string;
10631
+ kind: "PLATFORM" | "CUSTOM";
10632
+ status: "ACTIVE" | "HELD";
10633
+ isPrimary: boolean;
10634
+ holdUntil: string | null;
10635
+ }[];
10636
+ templateId: string;
10637
+ sourceMode: "CUSTOM" | "MANAGED";
10638
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10639
+ visibility: "COMING_SOON" | "PUBLIC";
10640
+ publishedVersion: {
10641
+ versionId: string;
10642
+ number: number;
10643
+ templateId: string;
10644
+ templateVersion: string;
10645
+ status: "FAILED" | "BUILDING" | "READY";
10646
+ published: boolean;
10647
+ publishedAt: string | null;
10648
+ message: string | null;
10649
+ createdByType: string;
10650
+ createdAt: string;
10651
+ } | null;
10652
+ provisioning: {
10653
+ status: "PENDING" | "FAILED" | "SYNCED";
10654
+ lastErrorCode: string | null;
10655
+ syncedAt: string | null;
10656
+ };
10657
+ slugChangesRemaining: number;
10658
+ createdAt: string;
10659
+ updatedAt: string;
10660
+ }>;
10661
+ /** `POST /v1/storefront/site/template` — 템플릿을 바꾼다. 새 버전을 만들고 기본으로 곧바로 발행한다 */
10662
+ changeTemplate: (body: ChangeStorefrontTemplateRequest) => Promise<{
10663
+ siteId: string;
10664
+ slug: string;
10665
+ hostname: string;
10666
+ url: string;
10667
+ domains: {
10668
+ hostname: string;
10669
+ kind: "PLATFORM" | "CUSTOM";
10670
+ status: "ACTIVE" | "HELD";
10671
+ isPrimary: boolean;
10672
+ holdUntil: string | null;
10673
+ }[];
10674
+ templateId: string;
10675
+ sourceMode: "CUSTOM" | "MANAGED";
10676
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10677
+ visibility: "COMING_SOON" | "PUBLIC";
10678
+ publishedVersion: {
10679
+ versionId: string;
10680
+ number: number;
10681
+ templateId: string;
10682
+ templateVersion: string;
10683
+ status: "FAILED" | "BUILDING" | "READY";
10684
+ published: boolean;
10685
+ publishedAt: string | null;
10686
+ message: string | null;
10687
+ createdByType: string;
10688
+ createdAt: string;
10689
+ } | null;
10690
+ provisioning: {
10691
+ status: "PENDING" | "FAILED" | "SYNCED";
10692
+ lastErrorCode: string | null;
10693
+ syncedAt: string | null;
10694
+ };
10695
+ slugChangesRemaining: number;
10696
+ createdAt: string;
10697
+ updatedAt: string;
10698
+ }>;
10699
+ /** `GET /v1/storefront/site/versions` — 버전 목록(최신 먼저) */
10700
+ listVersions: () => Promise<{
10701
+ versionId: string;
10702
+ number: number;
10703
+ templateId: string;
10704
+ templateVersion: string;
10705
+ status: "FAILED" | "BUILDING" | "READY";
10706
+ published: boolean;
10707
+ publishedAt: string | null;
10708
+ message: string | null;
10709
+ createdByType: string;
10710
+ createdAt: string;
10711
+ }[]>;
10712
+ /** `POST /v1/storefront/site/versions/{versionId}/publish` — 그 버전을 발행한다(이미 발행돼 있으면 그대로 200) */
10713
+ publish: (versionId: string, body?: PublishStorefrontVersionRequest) => Promise<{
10714
+ siteId: string;
10715
+ slug: string;
10716
+ hostname: string;
10717
+ url: string;
10718
+ domains: {
10719
+ hostname: string;
10720
+ kind: "PLATFORM" | "CUSTOM";
10721
+ status: "ACTIVE" | "HELD";
10722
+ isPrimary: boolean;
10723
+ holdUntil: string | null;
10724
+ }[];
10725
+ templateId: string;
10726
+ sourceMode: "CUSTOM" | "MANAGED";
10727
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10728
+ visibility: "COMING_SOON" | "PUBLIC";
10729
+ publishedVersion: {
10730
+ versionId: string;
10731
+ number: number;
10732
+ templateId: string;
10733
+ templateVersion: string;
10734
+ status: "FAILED" | "BUILDING" | "READY";
10735
+ published: boolean;
10736
+ publishedAt: string | null;
10737
+ message: string | null;
10738
+ createdByType: string;
10739
+ createdAt: string;
10740
+ } | null;
10741
+ provisioning: {
10742
+ status: "PENDING" | "FAILED" | "SYNCED";
10743
+ lastErrorCode: string | null;
10744
+ syncedAt: string | null;
10745
+ };
10746
+ slugChangesRemaining: number;
10747
+ createdAt: string;
10748
+ updatedAt: string;
10749
+ }>;
10750
+ /** `POST /v1/storefront/site/rollback` — 이전 발행 버전으로 되돌린다(재빌드 없음) */
10751
+ rollback: (body?: RollbackStorefrontRequest) => Promise<{
10752
+ siteId: string;
10753
+ slug: string;
10754
+ hostname: string;
10755
+ url: string;
10756
+ domains: {
10757
+ hostname: string;
10758
+ kind: "PLATFORM" | "CUSTOM";
10759
+ status: "ACTIVE" | "HELD";
10760
+ isPrimary: boolean;
10761
+ holdUntil: string | null;
10762
+ }[];
10763
+ templateId: string;
10764
+ sourceMode: "CUSTOM" | "MANAGED";
10765
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10766
+ visibility: "COMING_SOON" | "PUBLIC";
10767
+ publishedVersion: {
10768
+ versionId: string;
10769
+ number: number;
10770
+ templateId: string;
10771
+ templateVersion: string;
10772
+ status: "FAILED" | "BUILDING" | "READY";
10773
+ published: boolean;
10774
+ publishedAt: string | null;
10775
+ message: string | null;
10776
+ createdByType: string;
10777
+ createdAt: string;
10778
+ } | null;
10779
+ provisioning: {
10780
+ status: "PENDING" | "FAILED" | "SYNCED";
10781
+ lastErrorCode: string | null;
10782
+ syncedAt: string | null;
10783
+ };
10784
+ slugChangesRemaining: number;
10785
+ createdAt: string;
10786
+ updatedAt: string;
10787
+ }>;
10788
+ /** `PUT /v1/storefront/site/slug` — 슬러그를 바꾼다. 옛 슬러그는 90일 보류되고 새 주소로 301한다 */
10789
+ changeSlug: (body: ChangeStorefrontSlugRequest) => Promise<{
10790
+ siteId: string;
10791
+ slug: string;
10792
+ hostname: string;
10793
+ url: string;
10794
+ domains: {
10795
+ hostname: string;
10796
+ kind: "PLATFORM" | "CUSTOM";
10797
+ status: "ACTIVE" | "HELD";
10798
+ isPrimary: boolean;
10799
+ holdUntil: string | null;
10800
+ }[];
10801
+ templateId: string;
10802
+ sourceMode: "CUSTOM" | "MANAGED";
10803
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10804
+ visibility: "COMING_SOON" | "PUBLIC";
10805
+ publishedVersion: {
10806
+ versionId: string;
10807
+ number: number;
10808
+ templateId: string;
10809
+ templateVersion: string;
10810
+ status: "FAILED" | "BUILDING" | "READY";
10811
+ published: boolean;
10812
+ publishedAt: string | null;
10813
+ message: string | null;
10814
+ createdByType: string;
10815
+ createdAt: string;
10816
+ } | null;
10817
+ provisioning: {
10818
+ status: "PENDING" | "FAILED" | "SYNCED";
10819
+ lastErrorCode: string | null;
10820
+ syncedAt: string | null;
10821
+ };
10822
+ slugChangesRemaining: number;
10823
+ createdAt: string;
10824
+ updatedAt: string;
10825
+ }>;
10826
+ /** `PUT /v1/storefront/site/visibility` — 오픈 준비 중 ↔ 공개 */
10827
+ setVisibility: (body: SetStorefrontVisibilityRequest) => Promise<{
10828
+ siteId: string;
10829
+ slug: string;
10830
+ hostname: string;
10831
+ url: string;
10832
+ domains: {
10833
+ hostname: string;
10834
+ kind: "PLATFORM" | "CUSTOM";
10835
+ status: "ACTIVE" | "HELD";
10836
+ isPrimary: boolean;
10837
+ holdUntil: string | null;
10838
+ }[];
10839
+ templateId: string;
10840
+ sourceMode: "CUSTOM" | "MANAGED";
10841
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10842
+ visibility: "COMING_SOON" | "PUBLIC";
10843
+ publishedVersion: {
10844
+ versionId: string;
10845
+ number: number;
10846
+ templateId: string;
10847
+ templateVersion: string;
10848
+ status: "FAILED" | "BUILDING" | "READY";
10849
+ published: boolean;
10850
+ publishedAt: string | null;
10851
+ message: string | null;
10852
+ createdByType: string;
10853
+ createdAt: string;
10854
+ } | null;
10855
+ provisioning: {
10856
+ status: "PENDING" | "FAILED" | "SYNCED";
10857
+ lastErrorCode: string | null;
10858
+ syncedAt: string | null;
10859
+ };
10860
+ slugChangesRemaining: number;
10861
+ createdAt: string;
10862
+ updatedAt: string;
10863
+ }>;
10864
+ /**
10865
+ * `POST /v1/storefront/site/preview-link` — 오픈 준비 중인 사이트를 구성원이 볼 수 있는 5분짜리 링크.
10866
+ * 콘솔에서 로그인한 OWNER·ADMIN만 받는다
10867
+ */
10868
+ createPreviewLink: (body?: CreateStorefrontPreviewLinkRequest) => Promise<{
10869
+ url: string;
10870
+ expiresAt: string;
10871
+ }>;
10872
+ /** `POST /v1/storefront/site/disable` — 호스팅을 끈다(사이트 `CLOSED`, 슬러그 90일 보류). 다시 만들 수 있다 */
10873
+ disable: (body: DisableStorefrontHostingRequest) => Promise<{
10874
+ siteId: string;
10875
+ slug: string;
10876
+ hostname: string;
10877
+ url: string;
10878
+ domains: {
10879
+ hostname: string;
10880
+ kind: "PLATFORM" | "CUSTOM";
10881
+ status: "ACTIVE" | "HELD";
10882
+ isPrimary: boolean;
10883
+ holdUntil: string | null;
10884
+ }[];
10885
+ templateId: string;
10886
+ sourceMode: "CUSTOM" | "MANAGED";
10887
+ status: "ACTIVE" | "SUSPENDED" | "CLOSED";
10888
+ visibility: "COMING_SOON" | "PUBLIC";
10889
+ publishedVersion: {
10890
+ versionId: string;
10891
+ number: number;
10892
+ templateId: string;
10893
+ templateVersion: string;
10894
+ status: "FAILED" | "BUILDING" | "READY";
10895
+ published: boolean;
10896
+ publishedAt: string | null;
10897
+ message: string | null;
10898
+ createdByType: string;
10899
+ createdAt: string;
10900
+ } | null;
10901
+ provisioning: {
10902
+ status: "PENDING" | "FAILED" | "SYNCED";
10903
+ lastErrorCode: string | null;
10904
+ syncedAt: string | null;
10905
+ };
10906
+ slugChangesRemaining: number;
10907
+ createdAt: string;
10908
+ updatedAt: string;
10909
+ }>;
10910
+ };
10234
10911
  store: {
10235
10912
  get: () => Promise<{
10236
10913
  storeId: string;
@@ -10318,7 +10995,7 @@ export declare function createStoreClient(options: StoreClientOptions): {
10318
10995
  userId: string;
10319
10996
  name: string;
10320
10997
  email: string;
10321
- role: "OWNER" | "ADMIN" | "STAFF";
10998
+ role: "ADMIN" | "STAFF" | "OWNER";
10322
10999
  joinedAt: string;
10323
11000
  lastActiveAt: string | null;
10324
11001
  }[]>;
@@ -10880,6 +11557,7 @@ export declare const STORE_SCOPE_RESOURCES: {
10880
11557
  readonly customer: readonly ["r", "rw"];
10881
11558
  readonly audit: readonly ["r"];
10882
11559
  readonly promotion: readonly ["r", "rw"];
11560
+ readonly storefront: readonly ["r", "rw"];
10883
11561
  };
10884
11562
  export type StoreScopeResource = keyof typeof STORE_SCOPE_RESOURCES;
10885
11563
  export declare const storeScopeResourceSchema: z.ZodEnum<{
@@ -10897,6 +11575,7 @@ export declare const storeScopeResourceSchema: z.ZodEnum<{
10897
11575
  customer: "customer";
10898
11576
  audit: "audit";
10899
11577
  promotion: "promotion";
11578
+ storefront: "storefront";
10900
11579
  }>;
10901
11580
  /** 카탈로그상 존재하는 스코프 문자열인가 (예: `settlement:rw`는 false) */
10902
11581
  export declare function isStoreScope(scope: string): boolean;
@@ -10906,8 +11585,8 @@ export declare function isStoreScope(scope: string): boolean;
10906
11585
  * 발급 시 지정한 스코프만 갖는다(발급자 보유 스코프 이내).
10907
11586
  */
10908
11587
  export declare const STORE_ROLE_SCOPES: {
10909
- readonly OWNER: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "settlement:r", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw"];
10910
- readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw"];
11588
+ readonly OWNER: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "settlement:r", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw"];
11589
+ readonly ADMIN: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "analytics:r", "webhook:rw", "store:rw", "member:rw", "customer:rw", "audit:r", "promotion:rw", "storefront:rw"];
10911
11590
  readonly STAFF: readonly ["product:rw", "category:rw", "order:rw", "claim:rw", "inquiry:rw", "review:rw", "customer:r", "promotion:r"];
10912
11591
  };
10913
11592
  //#endregion