addashboard-cli 0.8.1 → 0.9.1
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/commands/ads.js +97 -7
- package/dist/commands/ads.js.map +1 -1
- package/dist/commands/placements.js +234 -0
- package/dist/commands/placements.js.map +1 -0
- package/dist/commands/submission.js +232 -16
- package/dist/commands/submission.js.map +1 -1
- package/dist/index.js +121 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas/submit-plan.js +80 -5
- package/dist/schemas/submit-plan.js.map +1 -1
- package/package.json +1 -1
- package/skills/ad-ops/SKILL.md +179 -9
- package/skills/ad-ops/ad-planner.html +1203 -2
- package/skills/ad-ops/scripts/adops.sh +55 -6
- package/skills/ad-ops/scripts/plan_lint.py +164 -24
- package/skills/ad-ops//343/202/242/343/202/253/343/202/246/343/203/263/343/203/210/bytedance/index.json +5 -0
- package/skills/ad-ops//343/202/242/343/202/253/343/202/246/343/203/263/343/203/210/bytedance/sample_account.json +55 -0
- package/skills/ad-ops//343/202/242/343/202/253/343/202/246/343/203/263/343/203/210/google/index.json +5 -0
- package/skills/ad-ops//343/202/242/343/202/253/343/202/246/343/203/263/343/203/210/google/sample_account.json +40 -0
- package/skills/ad-ops//343/202/265/343/203/263/343/203/227/343/203/253/343/203/227/343/203/251/343/203/263_bytedance.json +30 -0
- package/skills/ad-ops//343/202/265/343/203/263/343/203/227/343/203/253/343/203/227/343/203/251/343/203/263_google.json +33 -0
package/dist/commands/ads.js
CHANGED
|
@@ -16,13 +16,19 @@ exports.ALLOWED_RESOURCES = [
|
|
|
16
16
|
'pages',
|
|
17
17
|
'pixels',
|
|
18
18
|
'instagram-accounts',
|
|
19
|
+
'identities',
|
|
20
|
+
'regions',
|
|
21
|
+
'adgroups',
|
|
19
22
|
];
|
|
20
23
|
/** yda のみ対応のリソース。
|
|
21
|
-
* - media: 登録画像一覧 (W6 新規アカウントインポート用)。他媒体は画像一覧 API 未実装。
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
25
|
-
|
|
24
|
+
* - media: 登録画像一覧 (W6 新規アカウントインポート用)。他媒体は画像一覧 API 未実装。 */
|
|
25
|
+
const YDA_ONLY_RESOURCES = ['media'];
|
|
26
|
+
/** `ads` (入稿済み広告の一覧) に対応している媒体。
|
|
27
|
+
* 広告レベルの文言・URL・状態を取る。campaign-import は広告グループ設定までしか返さないため、
|
|
28
|
+
* 配信中の広告の中身と **入稿後に意図した状態 (PAUSED 等) で入ったか** を確認する手段がこれしかない。
|
|
29
|
+
* bytedance は #219 で、google は 2026-08-23 に追加
|
|
30
|
+
* (実 API 検証で「PAUSED で入ったか API から確認できない」と判明したため)。 */
|
|
31
|
+
const ADS_SUPPORTED_PLATFORMS = ['yda', 'google', 'bytedance'];
|
|
26
32
|
/** image-library / video-library は Meta のみ (backend /api/editor/meta/* 由来)。
|
|
27
33
|
* pages / pixels / instagram-accounts も Meta のみ。入稿プランナーの案件設定チップに要る
|
|
28
34
|
* FBページID / pixelId / IGユーザーID は CLI で取れず管理画面のコピペに頼っていたため追加した。 */
|
|
@@ -33,6 +39,10 @@ const META_ONLY_RESOURCES = [
|
|
|
33
39
|
'pixels',
|
|
34
40
|
'instagram-accounts',
|
|
35
41
|
];
|
|
42
|
+
/** bytedance のみ対応のリソース。
|
|
43
|
+
* - identities: 広告主として表示される TikTok アカウント。**これが無いと広告が作れない**
|
|
44
|
+
* (Meta の pages と同じ位置づけ)。動画・画像は resources が両方まとめて返すので分けない。 */
|
|
45
|
+
const BYTEDANCE_ONLY_RESOURCES = ['identities', 'regions', 'adgroups'];
|
|
36
46
|
/**
|
|
37
47
|
* v5 §5.2: platform × resource → backend エンドポイント解決テーブル。
|
|
38
48
|
*
|
|
@@ -46,12 +56,15 @@ const META_ONLY_RESOURCES = [
|
|
|
46
56
|
*
|
|
47
57
|
* media は W6 (新規アカウントインポート) 用の登録画像一覧リソース。yda のみ対応
|
|
48
58
|
* (/yda/media)。他媒体は未対応 (画像一覧 API 未実装)。
|
|
59
|
+
* --approval-status で審査状況を絞れる (カンマ区切り)。メディア単位の否認は広告単位の
|
|
60
|
+
* approvalStatus に出ない (広告は「承認済み」のまま画像だけ掲載不可になる) ため、
|
|
61
|
+
* 掲載不可メディアの検知はここが唯一の窓口になる。
|
|
49
62
|
*
|
|
50
63
|
* image-library / video-library は Meta の登録済みクリエイティブ一覧 (画像 hash / 動画 ID) で、
|
|
51
64
|
* backend の既存 GET /api/editor/meta/{image,video}-library を叩く。meta のみ対応。
|
|
52
65
|
*/
|
|
53
66
|
function resolvePath(input) {
|
|
54
|
-
const { platform, resource, accountId, campaignId, adGroupIds, raw } = input;
|
|
67
|
+
const { platform, resource, accountId, campaignId, adGroupIds, raw, approvalStatus, mode, levelRange, } = input;
|
|
55
68
|
if (!exports.ALLOWED_PLATFORMS.includes(platform)) {
|
|
56
69
|
throw new Error(`unknown platform: ${platform} (allowed: ${exports.ALLOWED_PLATFORMS.join(', ')})`);
|
|
57
70
|
}
|
|
@@ -61,10 +74,21 @@ function resolvePath(input) {
|
|
|
61
74
|
if (YDA_ONLY_RESOURCES.includes(resource) && platform !== 'yda') {
|
|
62
75
|
throw new Error(`${platform} + ${resource} は未対応です (${resource} は yda のみ対応)`);
|
|
63
76
|
}
|
|
77
|
+
if (resource === 'ads' && !ADS_SUPPORTED_PLATFORMS.includes(platform)) {
|
|
78
|
+
throw new Error(`${platform} + ads は未対応です (ads は ${ADS_SUPPORTED_PLATFORMS.join(' / ')} のみ対応)`);
|
|
79
|
+
}
|
|
80
|
+
// 審査状況フィルタは media 一覧にしか無い。他リソースで渡されたら黙って捨てず落とす
|
|
81
|
+
// (絞れたつもりで全件を見てしまうのが一番まずい)。
|
|
82
|
+
if (approvalStatus !== undefined && !(platform === 'yda' && resource === 'media')) {
|
|
83
|
+
throw new Error('--approval-status は yda + media でのみ指定できます');
|
|
84
|
+
}
|
|
64
85
|
// image-library / video-library (Meta の登録済みクリエイティブ一覧) は meta のみ対応。
|
|
65
86
|
if (META_ONLY_RESOURCES.includes(resource) && platform !== 'meta') {
|
|
66
87
|
throw new Error(`${platform} + ${resource} は未対応です (${META_ONLY_RESOURCES.join(' / ')} は meta のみ対応)`);
|
|
67
88
|
}
|
|
89
|
+
if (BYTEDANCE_ONLY_RESOURCES.includes(resource) && platform !== 'bytedance') {
|
|
90
|
+
throw new Error(`${platform} + ${resource} は未対応です (${BYTEDANCE_ONLY_RESOURCES.join(' / ')} は bytedance のみ対応)`);
|
|
91
|
+
}
|
|
68
92
|
if (platform === 'meta') {
|
|
69
93
|
if (resource === 'accounts')
|
|
70
94
|
return { path: '/api/submission/meta/accounts', query: {} };
|
|
@@ -149,7 +173,10 @@ function resolvePath(input) {
|
|
|
149
173
|
if (resource === 'media') {
|
|
150
174
|
if (!accountId)
|
|
151
175
|
throw new Error('--account-id が必要です (yda + media)');
|
|
152
|
-
return {
|
|
176
|
+
return {
|
|
177
|
+
path: '/api/submission/yda/media',
|
|
178
|
+
query: { accountId, ...(approvalStatus ? { approvalStatus } : {}) },
|
|
179
|
+
};
|
|
153
180
|
}
|
|
154
181
|
}
|
|
155
182
|
if (platform === 'google') {
|
|
@@ -165,6 +192,15 @@ function resolvePath(input) {
|
|
|
165
192
|
throw new Error('--account-id が必要です (google + resources)');
|
|
166
193
|
return { path: '/api/submission/google/resources', query: { accountId } };
|
|
167
194
|
}
|
|
195
|
+
if (resource === 'ads') {
|
|
196
|
+
if (!accountId)
|
|
197
|
+
throw new Error('--account-id が必要です (google + ads)');
|
|
198
|
+
// campaignId は任意。省略するとアカウント配下すべて (最大 500 件)
|
|
199
|
+
return {
|
|
200
|
+
path: '/api/submission/google/ads',
|
|
201
|
+
query: campaignId ? { accountId, campaignId } : { accountId },
|
|
202
|
+
};
|
|
203
|
+
}
|
|
168
204
|
}
|
|
169
205
|
if (platform === 'smartnews') {
|
|
170
206
|
if (resource === 'accounts')
|
|
@@ -191,6 +227,57 @@ function resolvePath(input) {
|
|
|
191
227
|
throw new Error('--account-id が必要です (bytedance + resources)');
|
|
192
228
|
return { path: '/api/submission/bytedance/resources', query: { accountId } };
|
|
193
229
|
}
|
|
230
|
+
// identity は広告アカウント配下 (--account-id 必須)。
|
|
231
|
+
// 広告作成に必須なので、プランナーの案件設定に入れる前にここで取る。
|
|
232
|
+
if (resource === 'identities') {
|
|
233
|
+
if (!accountId)
|
|
234
|
+
throw new Error('--account-id が必要です (bytedance + identities)');
|
|
235
|
+
return { path: '/api/submission/bytedance/identities', query: { accountId } };
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 入稿に使える地域 (location_id)。**地域IDは TikTok 独自で一覧が公開されていない**
|
|
239
|
+
* (実測で 1210023 が invalid だった)。応答のキー名も未確定なので --raw で生を見られる。
|
|
240
|
+
*/
|
|
241
|
+
if (resource === 'regions') {
|
|
242
|
+
if (!accountId)
|
|
243
|
+
throw new Error('--account-id が必要です (bytedance + regions)');
|
|
244
|
+
return {
|
|
245
|
+
path: '/api/submission/bytedance/regions',
|
|
246
|
+
query: {
|
|
247
|
+
accountId,
|
|
248
|
+
...(mode ? { mode } : {}),
|
|
249
|
+
...(levelRange ? { levelRange } : {}),
|
|
250
|
+
...(raw ? { raw: '1' } : {}),
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// 既存の広告グループ。**location_ids の逆引き**に使う(配信できている値が確実な手がかり)
|
|
255
|
+
if (resource === 'adgroups') {
|
|
256
|
+
if (!accountId)
|
|
257
|
+
throw new Error('--account-id が必要です (bytedance + adgroups)');
|
|
258
|
+
return {
|
|
259
|
+
path: '/api/submission/bytedance/adgroups',
|
|
260
|
+
query: { accountId, ...(campaignId ? { campaignId } : {}) },
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
// 入稿後の確認用。DISABLE で入ったか / 素材と CTA が反映されたかを見る。
|
|
264
|
+
if (resource === 'ads') {
|
|
265
|
+
if (!accountId)
|
|
266
|
+
throw new Error('--account-id が必要です (bytedance + ads)');
|
|
267
|
+
// TikTok の filtering は adgroup_ids を配列で取るが、CLI からは 1 件に絞る。
|
|
268
|
+
// 複数渡されたときに黙って先頭だけ使うと「絞れたつもりで別のものを見る」ため落とす。
|
|
269
|
+
if (adGroupIds && adGroupIds.includes(',')) {
|
|
270
|
+
throw new Error('--ad-group-ids は 1 件だけ指定してください (bytedance + ads)');
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
path: '/api/submission/bytedance/ads',
|
|
274
|
+
query: {
|
|
275
|
+
accountId,
|
|
276
|
+
...(campaignId ? { campaignId } : {}),
|
|
277
|
+
...(adGroupIds ? { adGroupId: adGroupIds.trim() } : {}),
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
194
281
|
}
|
|
195
282
|
throw new Error(`unsupported: ${platform} + ${resource}`);
|
|
196
283
|
}
|
|
@@ -208,6 +295,9 @@ async function runList(input) {
|
|
|
208
295
|
campaignId: input.campaignId,
|
|
209
296
|
adGroupIds: input.adGroupIds,
|
|
210
297
|
raw: input.raw,
|
|
298
|
+
approvalStatus: input.approvalStatus,
|
|
299
|
+
mode: input.mode,
|
|
300
|
+
levelRange: input.levelRange,
|
|
211
301
|
});
|
|
212
302
|
}
|
|
213
303
|
catch (e) {
|
package/dist/commands/ads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/commands/ads.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ads.js","sourceRoot":"","sources":["../../src/commands/ads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseUrlsFile = parseUrlsFile;
|
|
7
|
+
exports.runPlacementsList = runPlacementsList;
|
|
8
|
+
exports.runPlacementsCreate = runPlacementsCreate;
|
|
9
|
+
exports.runPlacementsAddUrls = runPlacementsAddUrls;
|
|
10
|
+
exports.runPlacementsClone = runPlacementsClone;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const apiClient_1 = require("../lib/apiClient");
|
|
13
|
+
const BASE_PATH = '/api/submission/yda/placement-lists';
|
|
14
|
+
/**
|
|
15
|
+
* --urls-file を PlacementUrlEntry[] に正規化する。
|
|
16
|
+
*
|
|
17
|
+
* 受け付ける形式は 2 つ:
|
|
18
|
+
* 1. JSON 配列 (`[` 始まり)。要素は文字列でも { placementUrl, urlActiveFlg? } でもよい
|
|
19
|
+
* 2. 1 行 1 URL のテキスト。空行と `#` 始まりの行 (コメント) は捨てる
|
|
20
|
+
*
|
|
21
|
+
* 「管理画面からコピペしたテキスト」と「別リストから書き出した JSON」の
|
|
22
|
+
* どちらもそのまま渡せるようにするための二刀流。
|
|
23
|
+
*/
|
|
24
|
+
function parseUrlsFile(filePath) {
|
|
25
|
+
let raw;
|
|
26
|
+
try {
|
|
27
|
+
raw = fs_1.default.readFileSync(filePath, 'utf8');
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
throw new Error(`URLファイルを読み込めませんでした (${filePath}): ${e.message}`);
|
|
31
|
+
}
|
|
32
|
+
const trimmed = raw.trim();
|
|
33
|
+
if (!trimmed) {
|
|
34
|
+
throw new Error(`URLファイルが空です (${filePath})`);
|
|
35
|
+
}
|
|
36
|
+
let entries;
|
|
37
|
+
if (trimmed.startsWith('[')) {
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(trimmed);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
throw new Error(`URLファイルの JSON を解析できませんでした (${filePath}): ${e.message}`);
|
|
44
|
+
}
|
|
45
|
+
if (!Array.isArray(parsed)) {
|
|
46
|
+
throw new Error(`URLファイルの JSON は配列である必要があります (${filePath})`);
|
|
47
|
+
}
|
|
48
|
+
entries = parsed.map((item, i) => {
|
|
49
|
+
if (typeof item === 'string')
|
|
50
|
+
return { placementUrl: item.trim() };
|
|
51
|
+
if (item && typeof item === 'object' && typeof item.placementUrl === 'string') {
|
|
52
|
+
const o = item;
|
|
53
|
+
return {
|
|
54
|
+
placementUrl: o.placementUrl.trim(),
|
|
55
|
+
...(o.urlActiveFlg ? { urlActiveFlg: o.urlActiveFlg } : {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`URLファイルの ${i + 1} 番目の要素が不正です (文字列か { placementUrl } が必要): ${JSON.stringify(item)}`);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
entries = trimmed
|
|
63
|
+
.split(/\r?\n/)
|
|
64
|
+
.map((line) => line.trim())
|
|
65
|
+
// 空行と # 始まりのコメント行を捨てる
|
|
66
|
+
.filter((line) => line !== '' && !line.startsWith('#'))
|
|
67
|
+
.map((line) => ({ placementUrl: line }));
|
|
68
|
+
}
|
|
69
|
+
entries = entries.filter((e) => e.placementUrl !== '');
|
|
70
|
+
if (entries.length === 0) {
|
|
71
|
+
throw new Error(`URLファイルに有効なURLがありません (${filePath})`);
|
|
72
|
+
}
|
|
73
|
+
return entries;
|
|
74
|
+
}
|
|
75
|
+
/** 認証 client を作る。credentials 未保存なら not_logged_in が飛ぶ。 */
|
|
76
|
+
function makeClient(input) {
|
|
77
|
+
return (input.clientFactory ?? apiClient_1.buildAuthedApiClient)(input.store);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* axios のエラーを CLI の表示用メッセージへ畳む (freee の freeeErrMsg と同じ流儀)。
|
|
81
|
+
*
|
|
82
|
+
* ⚠ backend の errorHandler は **`{ error: { message } }` とオブジェクトで返す**。
|
|
83
|
+
* `data.error` を文字列前提で扱うと `[object Object]` になり、除外リスト重複や
|
|
84
|
+
* URL 0 件など、わざわざ日本語で書いた説明が全部消える。
|
|
85
|
+
* zod の検証エラーだけは `{ error: 'validation_error' }` の文字列なので両対応にする。
|
|
86
|
+
*/
|
|
87
|
+
function describeError(err) {
|
|
88
|
+
const status = err?.response?.status;
|
|
89
|
+
if (status === 401)
|
|
90
|
+
return 'unauthorized';
|
|
91
|
+
const data = err?.response?.data;
|
|
92
|
+
const e = data?.error;
|
|
93
|
+
if (typeof e === 'string')
|
|
94
|
+
return e;
|
|
95
|
+
if (e && typeof e === 'object' && 'message' in e)
|
|
96
|
+
return String(e.message);
|
|
97
|
+
if (typeof data?.message === 'string')
|
|
98
|
+
return data.message;
|
|
99
|
+
return err.message ?? 'network_error';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* JWT (検証なし) から email を取り出す。失敗時は undefined。
|
|
103
|
+
* submit / freee issue が監査ログに実行者を出しているので、実アカウントへ書き込む
|
|
104
|
+
* placements も同じ規約に揃える(両コマンドとも各ファイルに同じ helper を持っている)。
|
|
105
|
+
*/
|
|
106
|
+
function decodeJwtEmail(token) {
|
|
107
|
+
if (!token)
|
|
108
|
+
return undefined;
|
|
109
|
+
try {
|
|
110
|
+
const payload = token.split('.')[1];
|
|
111
|
+
if (!payload)
|
|
112
|
+
return undefined;
|
|
113
|
+
const v = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
114
|
+
return typeof v?.email === 'string' ? v.email : undefined;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** dry-run なしで --yes が無ければ拒否する安全弁 (submit / freee issue と同じ)。 */
|
|
121
|
+
function guardWrite(input) {
|
|
122
|
+
if (!input.dryRun && !input.yes) {
|
|
123
|
+
return {
|
|
124
|
+
ok: false,
|
|
125
|
+
exitCode: 2,
|
|
126
|
+
error: '本実行するには --yes を明示してください (dry-run なしで実 API を叩く操作です)',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
/** 書き込み系ルートの共通 POST。dry-run は body の dryRun で表す (backend 側の契約)。 */
|
|
132
|
+
async function postWrite(input, path, body) {
|
|
133
|
+
const log = input.logger ?? ((line) => console.error(line));
|
|
134
|
+
const guarded = guardWrite(input);
|
|
135
|
+
if (guarded)
|
|
136
|
+
return guarded;
|
|
137
|
+
let client;
|
|
138
|
+
try {
|
|
139
|
+
client = makeClient(input);
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
return { ok: false, exitCode: 1, error: e.message };
|
|
143
|
+
}
|
|
144
|
+
const user = decodeJwtEmail(input.store.load()?.accessToken) ?? 'unknown';
|
|
145
|
+
log(`[cli/placements] user=${user} POST ${path} dry_run=${input.dryRun}`);
|
|
146
|
+
try {
|
|
147
|
+
const res = await client.post(path, { ...body, dryRun: input.dryRun },
|
|
148
|
+
// 本実行は get → マージ → set と媒体 API を順に叩くので既定 15 秒では足りない
|
|
149
|
+
input.dryRun ? {} : { timeout: apiClient_1.SUBMIT_TIMEOUT_MS });
|
|
150
|
+
return { ok: true, exitCode: 0, data: res.data };
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
return { ok: false, exitCode: 1, error: describeError(err) };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** `webgram placements list` の本体。参照のみなので dry-run の概念を持たない。 */
|
|
157
|
+
async function runPlacementsList(input) {
|
|
158
|
+
let client;
|
|
159
|
+
try {
|
|
160
|
+
client = makeClient(input);
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
return { ok: false, exitCode: 1, error: e.message };
|
|
164
|
+
}
|
|
165
|
+
const params = { accountId: input.accountId };
|
|
166
|
+
// backend 側はカンマ区切りで複数受けるが、CLI は 1 件指定のみ公開する
|
|
167
|
+
if (input.urlListId)
|
|
168
|
+
params.urlListIds = input.urlListId;
|
|
169
|
+
try {
|
|
170
|
+
const res = await client.get(BASE_PATH, { params });
|
|
171
|
+
return { ok: true, exitCode: 0, data: res.data };
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
return { ok: false, exitCode: 1, error: describeError(err) };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** `webgram placements create` の本体。新しい URL リストを作る。 */
|
|
178
|
+
async function runPlacementsCreate(input) {
|
|
179
|
+
// --yes チェックを URL 読込より先に置く。ファイルが不正でも「拒否理由」が
|
|
180
|
+
// 先に出るほうが利用者にとって分かりやすい (submit と同じ順序)。
|
|
181
|
+
const guarded = guardWrite(input);
|
|
182
|
+
if (guarded)
|
|
183
|
+
return guarded;
|
|
184
|
+
let urls;
|
|
185
|
+
try {
|
|
186
|
+
urls = parseUrlsFile(input.urlsFile);
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
return { ok: false, exitCode: 1, error: e.message };
|
|
190
|
+
}
|
|
191
|
+
return postWrite(input, BASE_PATH, {
|
|
192
|
+
accountId: input.accountId,
|
|
193
|
+
name: input.name,
|
|
194
|
+
urls,
|
|
195
|
+
...(input.description ? { description: input.description } : {}),
|
|
196
|
+
...(input.exclusion ? { isExclusion: true } : {}),
|
|
197
|
+
// 未指定なら媒体側の既定に任せる (キー自体を送らない)
|
|
198
|
+
...(input.unknownDomain ? { unknownDomainFlg: 'TRUE' } : {}),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* `webgram placements add-urls` の本体。既存リストへ URL を追記する。
|
|
203
|
+
*
|
|
204
|
+
* 媒体の set は urls を渡すと**全置換**になるため、差分マージは backend が
|
|
205
|
+
* 「get → マージ → set」で行う。CLI は追加したい URL を渡すだけでよい。
|
|
206
|
+
*/
|
|
207
|
+
async function runPlacementsAddUrls(input) {
|
|
208
|
+
const guarded = guardWrite(input);
|
|
209
|
+
if (guarded)
|
|
210
|
+
return guarded;
|
|
211
|
+
let urls;
|
|
212
|
+
try {
|
|
213
|
+
urls = parseUrlsFile(input.urlsFile);
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
return { ok: false, exitCode: 1, error: e.message };
|
|
217
|
+
}
|
|
218
|
+
return postWrite(input, `${BASE_PATH}/urls`, {
|
|
219
|
+
accountId: input.accountId,
|
|
220
|
+
urlListId: input.urlListId,
|
|
221
|
+
urls,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
/** `webgram placements clone` の本体。別アカウントへ URL リストを転記する。 */
|
|
225
|
+
async function runPlacementsClone(input) {
|
|
226
|
+
return postWrite(input, `${BASE_PATH}/clone`, {
|
|
227
|
+
sourceAccountId: input.sourceAccountId,
|
|
228
|
+
sourceUrlListId: input.sourceUrlListId,
|
|
229
|
+
targetAccountId: input.targetAccountId,
|
|
230
|
+
...(input.name ? { name: input.name } : {}),
|
|
231
|
+
...(input.mergeIntoExisting ? { mergeIntoExisting: true } : {}),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=placements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placements.js","sourceRoot":"","sources":["../../src/commands/placements.ts"],"names":[],"mappings":"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"}
|