@@ -97,6 +97,7 @@ describe("r2", () => {
97
97
wrangler r2 bucket delete <name> Delete an R2 bucket
98
98
wrangler r2 bucket sippy Manage Sippy incremental migration on an R2 bucket
99
99
wrangler r2 bucket notification Manage event notification rules for an R2 bucket
100
+ wrangler r2 bucket domain Manage custom domains for an R2 bucket
100
101
101
102
GLOBAL FLAGS
102
103
-j, --experimental-json-config Experimental: support wrangler.json [boolean]
@@ -131,6 +132,7 @@ describe("r2", () => {
131
132
wrangler r2 bucket delete <name> Delete an R2 bucket
132
133
wrangler r2 bucket sippy Manage Sippy incremental migration on an R2 bucket
133
134
wrangler r2 bucket notification Manage event notification rules for an R2 bucket
135
+ wrangler r2 bucket domain Manage custom domains for an R2 bucket
134
136
135
137
GLOBAL FLAGS
136
138
-j, --experimental-json-config Experimental: support wrangler.json [boolean]
@@ -1443,6 +1445,187 @@ describe("r2", () => {
1443
1445
} ) ;
1444
1446
} ) ;
1445
1447
} ) ;
1448
+ describe ( "domain" , ( ) => {
1449
+ mockAccountId ( ) ;
1450
+ mockApiToken ( ) ;
1451
+ describe ( "add" , ( ) => {
1452
+ it ( "should add custom domain to the bucket as expected" , async ( ) => {
1453
+ const bucketName = "my-bucket" ;
1454
+ const domainName = "example.com" ;
1455
+ const zoneId = "zone-id-123" ;
1456
+ msw . use (
1457
+ http . post (
1458
+ "*/accounts/:accountId/r2/buckets/:bucketName/domains/custom" ,
1459
+ async ( { request, params } ) => {
1460
+ const { accountId, bucketName : bucketParam } = params ;
1461
+ expect ( accountId ) . toEqual ( "some-account-id" ) ;
1462
+ expect ( bucketName ) . toEqual ( bucketParam ) ;
1463
+ const requestBody = await request . json ( ) ;
1464
+ expect ( requestBody ) . toEqual ( {
1465
+ domain : domainName ,
1466
+ zoneId : zoneId ,
1467
+ enabled : true ,
1468
+ minTLS : "1.0" ,
1469
+ } ) ;
1470
+ return HttpResponse . json ( createFetchResult ( { } ) ) ;
1471
+ } ,
1472
+ { once : true }
1473
+ )
1474
+ ) ;
1475
+ await runWrangler (
1476
+ `r2 bucket domain add ${ bucketName } --domain ${ domainName } --zone-id ${ zoneId } `
1477
+ ) ;
1478
+ expect ( std . out ) . toMatchInlineSnapshot ( `
1479
+ "Connecting custom domain 'example.com' to bucket 'my-bucket'...
1480
+ ✨ Custom domain 'example.com' connected successfully."
1481
+ ` ) ;
1482
+ } ) ;
1483
+
1484
+ it ( "should error if domain and zone-id are not provided" , async ( ) => {
1485
+ const bucketName = "my-bucket" ;
1486
+ await expect (
1487
+ runWrangler ( `r2 bucket domain add ${ bucketName } ` )
1488
+ ) . rejects . toThrowErrorMatchingInlineSnapshot (
1489
+ `[Error: Missing required arguments: domain, zone-id]`
1490
+ ) ;
1491
+ expect ( std . err ) . toMatchInlineSnapshot ( `
1492
+ "[31mX [41;31m[[41;97mERROR[41;31m][0m [1mMissing required arguments: domain, zone-id[0m
1493
+
1494
+ "
1495
+ ` ) ;
1496
+ } ) ;
1497
+ } ) ;
1498
+ describe ( "list" , ( ) => {
1499
+ it ( "should list custom domains for a bucket as expected" , async ( ) => {
1500
+ const bucketName = "my-bucket" ;
1501
+ const mockDomains = [
1502
+ {
1503
+ domain : "example.com" ,
1504
+ enabled : true ,
1505
+ status : {
1506
+ ownership : "verified" ,
1507
+ ssl : "active" ,
1508
+ } ,
1509
+ minTLS : "1.2" ,
1510
+ zoneId : "zone-id-123" ,
1511
+ zoneName : "example-zone" ,
1512
+ } ,
1513
+ {
1514
+ domain : "test.com" ,
1515
+ enabled : false ,
1516
+ status : {
1517
+ ownership : "pending" ,
1518
+ ssl : "pending" ,
1519
+ } ,
1520
+ minTLS : "1.0" ,
1521
+ zoneId : "zone-id-456" ,
1522
+ zoneName : "test-zone" ,
1523
+ } ,
1524
+ ] ;
1525
+ msw . use (
1526
+ http . get (
1527
+ "*/accounts/:accountId/r2/buckets/:bucketName/domains/custom" ,
1528
+ async ( { params } ) => {
1529
+ const { accountId, bucketName : bucketParam } = params ;
1530
+ expect ( accountId ) . toEqual ( "some-account-id" ) ;
1531
+ expect ( bucketParam ) . toEqual ( bucketName ) ;
1532
+ return HttpResponse . json (
1533
+ createFetchResult ( {
1534
+ domains : mockDomains ,
1535
+ } )
1536
+ ) ;
1537
+ } ,
1538
+ { once : true }
1539
+ )
1540
+ ) ;
1541
+ await runWrangler ( `r2 bucket domain list ${ bucketName } ` ) ;
1542
+ expect ( std . out ) . toMatchInlineSnapshot ( `
1543
+ "Listing custom domains connected to bucket 'my-bucket'...
1544
+ domain: example.com
1545
+ enabled: Yes
1546
+ ownership_status: verified
1547
+ ssl_status: active
1548
+ min_tls_version: 1.2
1549
+ zone_id: zone-id-123
1550
+ zone_name: example-zone
1551
+
1552
+ domain: test.com
1553
+ enabled: No
1554
+ ownership_status: pending
1555
+ ssl_status: pending
1556
+ min_tls_version: 1.0
1557
+ zone_id: zone-id-456
1558
+ zone_name: test-zone"
1559
+ ` ) ;
1560
+ } ) ;
1561
+ } ) ;
1562
+ describe ( "remove" , ( ) => {
1563
+ it ( "should remove a custom domain as expected" , async ( ) => {
1564
+ const bucketName = "my-bucket" ;
1565
+ const domainName = "example.com" ;
1566
+ msw . use (
1567
+ http . delete (
1568
+ "*/accounts/:accountId/r2/buckets/:bucketName/domains/custom/:domainName" ,
1569
+ async ( { params } ) => {
1570
+ const {
1571
+ accountId,
1572
+ bucketName : bucketParam ,
1573
+ domainName : domainParam ,
1574
+ } = params ;
1575
+ expect ( accountId ) . toEqual ( "some-account-id" ) ;
1576
+ expect ( bucketParam ) . toEqual ( bucketName ) ;
1577
+ expect ( domainParam ) . toEqual ( domainName ) ;
1578
+ return HttpResponse . json ( createFetchResult ( { } ) ) ;
1579
+ } ,
1580
+ { once : true }
1581
+ )
1582
+ ) ;
1583
+ await runWrangler (
1584
+ `r2 bucket domain remove ${ bucketName } --domain ${ domainName } `
1585
+ ) ;
1586
+ expect ( std . out ) . toMatchInlineSnapshot ( `
1587
+ "Removing custom domain 'example.com' from bucket 'my-bucket'...
1588
+ Custom domain 'example.com' removed successfully."
1589
+ ` ) ;
1590
+ } ) ;
1591
+ } ) ;
1592
+ describe ( "update" , ( ) => {
1593
+ it ( "should update a custom domain as expected" , async ( ) => {
1594
+ const bucketName = "my-bucket" ;
1595
+ const domainName = "example.com" ;
1596
+ msw . use (
1597
+ http . put (
1598
+ "*/accounts/:accountId/r2/buckets/:bucketName/domains/custom/:domainName" ,
1599
+ async ( { request, params } ) => {
1600
+ const {
1601
+ accountId,
1602
+ bucketName : bucketParam ,
1603
+ domainName : domainParam ,
1604
+ } = params ;
1605
+ expect ( accountId ) . toEqual ( "some-account-id" ) ;
1606
+ expect ( bucketParam ) . toEqual ( bucketName ) ;
1607
+ expect ( domainParam ) . toEqual ( domainName ) ;
1608
+ const requestBody = await request . json ( ) ;
1609
+ expect ( requestBody ) . toEqual ( {
1610
+ domain : domainName ,
1611
+ enabled : false ,
1612
+ minTLS : "1.3" ,
1613
+ } ) ;
1614
+ return HttpResponse . json ( createFetchResult ( { } ) ) ;
1615
+ } ,
1616
+ { once : true }
1617
+ )
1618
+ ) ;
1619
+ await runWrangler (
1620
+ `r2 bucket domain update ${ bucketName } --domain ${ domainName } --enabled false --min-tls 1.3`
1621
+ ) ;
1622
+ expect ( std . out ) . toMatchInlineSnapshot ( `
1623
+ "Updating custom domain 'example.com' for bucket 'my-bucket'...
1624
+ ✨ Custom domain 'example.com' updated successfully."
1625
+ ` ) ;
1626
+ } ) ;
1627
+ } ) ;
1628
+ } ) ;
1446
1629
} ) ;
1447
1630
1448
1631
describe ( "r2 object" , ( ) => {
0 commit comments