Skip to content

Commit 3c813e2

Browse files
committed
add support for integer IDs in bulk status
1 parent 06d8de3 commit 3c813e2

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

packages/app/src/cli/commands/app/bulk/status.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import {appFlags} from '../../../flags.js'
22
import AppLinkedCommand, {AppLinkedCommandOutput} from '../../../utilities/app-linked-command.js'
33
import {prepareAppStoreContext} from '../../../utilities/execute-command-helpers.js'
4-
import {getBulkOperationStatus, listBulkOperations} from '../../../services/bulk-operations/bulk-operation-status.js'
4+
import {
5+
getBulkOperationStatus,
6+
listBulkOperations,
7+
normalizeBulkOperationId,
8+
} from '../../../services/bulk-operations/bulk-operation-status.js'
59
import {Flags} from '@oclif/core'
610
import {globalFlags} from '@shopify/cli-kit/node/cli'
711
import {normalizeStoreFqdn} from '@shopify/cli-kit/node/context/fqdn'
@@ -18,7 +22,8 @@ export default class BulkStatus extends AppLinkedCommand {
1822
...globalFlags,
1923
...appFlags,
2024
id: Flags.string({
21-
description: 'The bulk operation ID. If not provided, lists all bulk operations in the last 7 days.',
25+
description:
26+
'The bulk operation ID (numeric ID or full GID). If not provided, lists all bulk operations in the last 7 days.',
2227
env: 'SHOPIFY_FLAG_ID',
2328
}),
2429
store: Flags.string({
@@ -38,7 +43,7 @@ export default class BulkStatus extends AppLinkedCommand {
3843
await getBulkOperationStatus({
3944
organization: appContextResult.organization,
4045
storeFqdn: store.shopDomain,
41-
operationId: flags.id,
46+
operationId: normalizeBulkOperationId(flags.id),
4247
remoteApp: appContextResult.remoteApp,
4348
})
4449
} else {

packages/app/src/cli/services/bulk-operations/bulk-operation-status.test.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {getBulkOperationStatus, listBulkOperations} from './bulk-operation-status.js'
1+
import {getBulkOperationStatus, listBulkOperations, normalizeBulkOperationId} from './bulk-operation-status.js'
22
import {GetBulkOperationByIdQuery} from '../../api/graphql/bulk-operations/generated/get-bulk-operation-by-id.js'
33
import {OrganizationApp, Organization, OrganizationSource} from '../../models/organization.js'
44
import {ListBulkOperationsQuery} from '../../api/graphql/bulk-operations/generated/list-bulk-operations.js'
@@ -36,6 +36,23 @@ afterEach(() => {
3636
mockAndCaptureOutput().clear()
3737
})
3838

39+
describe('normalizeBulkOperationId', () => {
40+
test('returns GID as-is when already in GID format', () => {
41+
const gid = 'gid://shopify/BulkOperation/123'
42+
expect(normalizeBulkOperationId(gid)).toBe(gid)
43+
})
44+
45+
test('converts numeric ID to GID format', () => {
46+
expect(normalizeBulkOperationId('123')).toBe('gid://shopify/BulkOperation/123')
47+
expect(normalizeBulkOperationId('456789')).toBe('gid://shopify/BulkOperation/456789')
48+
})
49+
50+
test('returns non-numeric, non-GID string as-is', () => {
51+
const invalidId = 'invalid-id'
52+
expect(normalizeBulkOperationId(invalidId)).toBe(invalidId)
53+
})
54+
})
55+
3956
describe('getBulkOperationStatus', () => {
4057
function mockBulkOperation(
4158
overrides?: Partial<NonNullable<GetBulkOperationByIdQuery['bulkOperation']>>,

packages/app/src/cli/services/bulk-operations/bulk-operation-status.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ import colors from '@shopify/cli-kit/node/colors'
2121

2222
const API_VERSION = '2026-01'
2323

24+
export function normalizeBulkOperationId(id: string): string {
25+
// If already a GID, return as-is
26+
if (id.startsWith('gid://')) {
27+
return id
28+
}
29+
30+
// If numeric, convert to GID
31+
if (/^\d+$/.test(id)) {
32+
return `gid://shopify/BulkOperation/${id}`
33+
}
34+
35+
// Otherwise return as-is (let API handle any errors)
36+
return id
37+
}
38+
2439
interface GetBulkOperationStatusOptions {
2540
organization: Organization
2641
storeFqdn: string

0 commit comments

Comments
 (0)