@react-native-kakao/share 3.1.0-next.0 → 3.1.0-next.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/CHANGELOG.md +26 -0
- package/RNCKakaoShare.podspec +0 -1
- package/android/build.gradle +1 -2
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareModule.kt +323 -11
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareTemplates.kt +5 -2
- package/ios/RNCKakaoShare.mm +64 -5
- package/ios/RNCKakaoShareManager.swift +315 -36
- package/lib/commonjs/index.js +137 -29
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +199 -21
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/spec/NativeKakaoShare.ts +76 -3
- package/lib/commonjs/validateSharePickerSettings.js +33 -0
- package/lib/commonjs/validateSharePickerSettings.js.map +1 -0
- package/lib/module/index.js +128 -29
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +190 -21
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/spec/NativeKakaoShare.ts +76 -3
- package/lib/module/validateSharePickerSettings.js +29 -0
- package/lib/module/validateSharePickerSettings.js.map +1 -0
- package/lib/typescript/src/index.d.ts +83 -23
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts +72 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts.map +1 -1
- package/lib/typescript/src/validateSharePickerSettings.d.ts +6 -0
- package/lib/typescript/src/validateSharePickerSettings.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +258 -15
- package/src/index.web.ts +232 -36
- package/src/spec/NativeKakaoShare.ts +76 -3
- package/src/validateSharePickerSettings.ts +38 -0
package/src/index.web.ts
CHANGED
|
@@ -3,12 +3,33 @@ import {
|
|
|
3
3
|
replaceJsonValuesRecursively,
|
|
4
4
|
snakeCaseObject,
|
|
5
5
|
} from '@mj-studio/js-util';
|
|
6
|
-
import { kRunWebAPI } from '@react-native-kakao/core';
|
|
6
|
+
import { kCreateWebError, kRunWebAPI } from '@react-native-kakao/core';
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
KakaoFriendMessageResult,
|
|
10
|
+
KakaoImageUploadResult,
|
|
11
|
+
KakaoMessageSendResult,
|
|
12
|
+
KakaoShareAPI,
|
|
13
|
+
KakaoSharePickerSettings,
|
|
14
|
+
} from './index';
|
|
15
|
+
import { validateSharePickerSettings } from './validateSharePickerSettings';
|
|
9
16
|
|
|
10
17
|
declare const Kakao: {
|
|
11
18
|
Share: {
|
|
19
|
+
uploadImage: (args: { file: Blob[] }) => Promise<{
|
|
20
|
+
infos: {
|
|
21
|
+
original: Omit<KakaoImageUploadResult['infos']['original'], 'contentType'> & {
|
|
22
|
+
content_type: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
sendScrap: (args: {
|
|
27
|
+
requestUrl: string;
|
|
28
|
+
templateId?: number;
|
|
29
|
+
templateArgs: Record<string, string>;
|
|
30
|
+
serverCallbackArgs: Record<string, string>;
|
|
31
|
+
pickerSettings?: KakaoSharePickerSettings;
|
|
32
|
+
}) => void;
|
|
12
33
|
scrapImage: (args: { imageUrl: string }) => Promise<{
|
|
13
34
|
infos: {
|
|
14
35
|
original: Omit<KakaoImageUploadResult['infos']['original'], 'contentType'> & {
|
|
@@ -26,10 +47,12 @@ function createShareDefault({
|
|
|
26
47
|
serverCallbackArgs,
|
|
27
48
|
template,
|
|
28
49
|
objectType,
|
|
50
|
+
pickerSettings,
|
|
29
51
|
}: {
|
|
30
52
|
objectType: string;
|
|
31
53
|
template: any;
|
|
32
54
|
serverCallbackArgs?: Record<string, string>;
|
|
55
|
+
pickerSettings?: KakaoSharePickerSettings;
|
|
33
56
|
}) {
|
|
34
57
|
return kRunWebAPI(() =>
|
|
35
58
|
Kakao.Share.sendDefault(
|
|
@@ -37,6 +60,7 @@ function createShareDefault({
|
|
|
37
60
|
objectType,
|
|
38
61
|
...serializeExecutionParams(template),
|
|
39
62
|
serverCallbackArgs,
|
|
63
|
+
pickerSettings: validateSharePickerSettings(pickerSettings),
|
|
40
64
|
}),
|
|
41
65
|
),
|
|
42
66
|
);
|
|
@@ -53,14 +77,42 @@ function createSendDefaultMe({ template, objectType }: { objectType: string; tem
|
|
|
53
77
|
});
|
|
54
78
|
}
|
|
55
79
|
|
|
56
|
-
|
|
80
|
+
type WebMessageSendResult = {
|
|
81
|
+
successful_receiver_uuids?: string[];
|
|
82
|
+
failure_info?: { code: number; msg: string; receiver_uuids: string[] }[];
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
function getFriendMessageResult<T extends boolean = false>(
|
|
86
|
+
response: WebMessageSendResult,
|
|
87
|
+
includeFailureInfo?: T,
|
|
88
|
+
): KakaoFriendMessageResult<T>;
|
|
89
|
+
function getFriendMessageResult(
|
|
90
|
+
response: WebMessageSendResult,
|
|
91
|
+
includeFailureInfo?: boolean,
|
|
92
|
+
): string[] | KakaoMessageSendResult {
|
|
93
|
+
const successfulReceiverUuids = response.successful_receiver_uuids ?? [];
|
|
94
|
+
|
|
95
|
+
return includeFailureInfo
|
|
96
|
+
? {
|
|
97
|
+
successfulReceiverUuids,
|
|
98
|
+
failureInfos: (response.failure_info ?? []).map(({ receiver_uuids, ...failure }) => ({
|
|
99
|
+
...failure,
|
|
100
|
+
receiverUuids: receiver_uuids,
|
|
101
|
+
})),
|
|
102
|
+
}
|
|
103
|
+
: successfulReceiverUuids;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function createSendDefaultFriends<T extends boolean = false>({
|
|
57
107
|
objectType,
|
|
58
108
|
template,
|
|
59
109
|
receiverUuids,
|
|
110
|
+
includeFailureInfo,
|
|
60
111
|
}: {
|
|
61
112
|
template: any;
|
|
62
113
|
objectType: any;
|
|
63
114
|
receiverUuids: string[];
|
|
115
|
+
includeFailureInfo?: T;
|
|
64
116
|
}) {
|
|
65
117
|
return kRunWebAPI(() =>
|
|
66
118
|
Kakao.API.request({
|
|
@@ -69,9 +121,8 @@ function createSendDefaultFriends({
|
|
|
69
121
|
template_object: serializeMessageTemplate(objectType, template),
|
|
70
122
|
receiver_uuids: receiverUuids,
|
|
71
123
|
},
|
|
72
|
-
}).then(
|
|
73
|
-
(response
|
|
74
|
-
response.successful_receiver_uuids ?? [],
|
|
124
|
+
}).then((response: WebMessageSendResult) =>
|
|
125
|
+
getFriendMessageResult(response, includeFailureInfo),
|
|
75
126
|
),
|
|
76
127
|
);
|
|
77
128
|
}
|
|
@@ -99,6 +150,115 @@ function serializeExecutionParams(template: object) {
|
|
|
99
150
|
}
|
|
100
151
|
|
|
101
152
|
const KakaoShare: KakaoShareAPI = {
|
|
153
|
+
isKakaoTalkSharingAvailable: async () => false,
|
|
154
|
+
getShareTemplateDiagnostics: async () => {
|
|
155
|
+
kCreateWebError({
|
|
156
|
+
code: 'Package-UnsupportedPlatform',
|
|
157
|
+
message: 'The Kakao JavaScript SDK does not expose sharing template diagnostics.',
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
makeDefaultTemplateUrl: unsupportedUrlBuilder,
|
|
161
|
+
makeCustomTemplateUrl: unsupportedUrlBuilder,
|
|
162
|
+
makeScrapTemplateUrl: unsupportedUrlBuilder,
|
|
163
|
+
uploadImage: ({ imageUri, secureResource = true }) =>
|
|
164
|
+
kRunWebAPI(async () => {
|
|
165
|
+
const response = await fetch(imageUri);
|
|
166
|
+
if (!response.ok) {
|
|
167
|
+
throw new Error(`Failed to read image: HTTP ${response.status}`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const reader = response.body?.getReader();
|
|
171
|
+
if (!reader) {
|
|
172
|
+
throw new Error('Image response has no body');
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const chunks: BlobPart[] = [];
|
|
176
|
+
let length = 0;
|
|
177
|
+
try {
|
|
178
|
+
while (true) {
|
|
179
|
+
const { done, value } = await reader.read();
|
|
180
|
+
if (done) {
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
length += value.byteLength;
|
|
185
|
+
if (length > 5 * 1024 * 1024) {
|
|
186
|
+
await reader.cancel();
|
|
187
|
+
throw new Error('Image must be no larger than 5 MB');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
chunks.push(value);
|
|
191
|
+
}
|
|
192
|
+
} finally {
|
|
193
|
+
reader.releaseLock();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const image = new Blob(chunks, { type: response.headers.get('content-type') ?? '' });
|
|
197
|
+
|
|
198
|
+
const { infos } = await Kakao.Share.uploadImage({ file: [image] });
|
|
199
|
+
const { content_type: contentType, ...original } = infos.original;
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
infos: {
|
|
203
|
+
original: {
|
|
204
|
+
...original,
|
|
205
|
+
url: original.url.replace(/^https?:/, secureResource ? 'https:' : 'http:'),
|
|
206
|
+
contentType,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}),
|
|
211
|
+
shareScrapTemplate: ({
|
|
212
|
+
requestUrl,
|
|
213
|
+
templateId,
|
|
214
|
+
templateArgs = {},
|
|
215
|
+
serverCallbackArgs = {},
|
|
216
|
+
pickerSettings,
|
|
217
|
+
}) =>
|
|
218
|
+
kRunWebAPI(() =>
|
|
219
|
+
Kakao.Share.sendScrap(
|
|
220
|
+
filterNonNullishKeys({
|
|
221
|
+
requestUrl,
|
|
222
|
+
templateId,
|
|
223
|
+
templateArgs,
|
|
224
|
+
serverCallbackArgs,
|
|
225
|
+
pickerSettings: validateSharePickerSettings(pickerSettings),
|
|
226
|
+
}),
|
|
227
|
+
),
|
|
228
|
+
),
|
|
229
|
+
sendScrapTemplateToMe: async ({ requestUrl, templateId, templateArgs }) => {
|
|
230
|
+
await kRunWebAPI(() =>
|
|
231
|
+
Kakao.API.request({
|
|
232
|
+
url: '/v2/api/talk/memo/scrap/send',
|
|
233
|
+
data: filterNonNullishKeys({
|
|
234
|
+
request_url: requestUrl,
|
|
235
|
+
template_id: templateId,
|
|
236
|
+
template_args: templateArgs,
|
|
237
|
+
}),
|
|
238
|
+
}),
|
|
239
|
+
);
|
|
240
|
+
},
|
|
241
|
+
sendScrapTemplateToFriends: async ({
|
|
242
|
+
requestUrl,
|
|
243
|
+
templateId,
|
|
244
|
+
templateArgs,
|
|
245
|
+
receiverUuids,
|
|
246
|
+
includeFailureInfo,
|
|
247
|
+
}) => {
|
|
248
|
+
const response: WebMessageSendResult = await kRunWebAPI(() =>
|
|
249
|
+
Kakao.API.request({
|
|
250
|
+
url: '/v1/api/talk/friends/message/scrap/send',
|
|
251
|
+
data: filterNonNullishKeys({
|
|
252
|
+
request_url: requestUrl,
|
|
253
|
+
template_id: templateId,
|
|
254
|
+
template_args: templateArgs,
|
|
255
|
+
receiver_uuids: receiverUuids,
|
|
256
|
+
}),
|
|
257
|
+
}),
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
return getFriendMessageResult(response, includeFailureInfo);
|
|
261
|
+
},
|
|
102
262
|
scrapImage: ({ imageUrl, secureResource = true }) =>
|
|
103
263
|
kRunWebAPI(async () => {
|
|
104
264
|
const { infos } = await Kakao.Share.scrapImage({ imageUrl });
|
|
@@ -114,10 +274,15 @@ const KakaoShare: KakaoShareAPI = {
|
|
|
114
274
|
},
|
|
115
275
|
};
|
|
116
276
|
}),
|
|
117
|
-
shareCustomTemplate: ({ templateArgs, templateId, serverCallbackArgs }) =>
|
|
277
|
+
shareCustomTemplate: ({ templateArgs, templateId, serverCallbackArgs, pickerSettings }) =>
|
|
118
278
|
kRunWebAPI(() =>
|
|
119
279
|
Kakao.Share.sendCustom(
|
|
120
|
-
filterNonNullishKeys({
|
|
280
|
+
filterNonNullishKeys({
|
|
281
|
+
templateId,
|
|
282
|
+
templateArgs,
|
|
283
|
+
serverCallbackArgs,
|
|
284
|
+
pickerSettings: validateSharePickerSettings(pickerSettings),
|
|
285
|
+
}),
|
|
121
286
|
),
|
|
122
287
|
),
|
|
123
288
|
sendCustomTemplateToMe: ({ templateId, templateArgs }) =>
|
|
@@ -127,7 +292,7 @@ const KakaoShare: KakaoShareAPI = {
|
|
|
127
292
|
data: filterNonNullishKeys({ template_id: templateId, template_args: templateArgs }),
|
|
128
293
|
});
|
|
129
294
|
}),
|
|
130
|
-
sendCustomTemplateToFriends: ({ templateArgs, templateId, receiverUuids }) =>
|
|
295
|
+
sendCustomTemplateToFriends: ({ templateArgs, templateId, receiverUuids, includeFailureInfo }) =>
|
|
131
296
|
kRunWebAPI(() =>
|
|
132
297
|
Kakao.API.request({
|
|
133
298
|
url: '/v1/api/talk/friends/message/send',
|
|
@@ -136,46 +301,77 @@ const KakaoShare: KakaoShareAPI = {
|
|
|
136
301
|
template_args: templateArgs,
|
|
137
302
|
receiver_uuids: receiverUuids,
|
|
138
303
|
}),
|
|
139
|
-
}).then(
|
|
140
|
-
(response
|
|
141
|
-
response.successful_receiver_uuids ?? [],
|
|
304
|
+
}).then((response: WebMessageSendResult) =>
|
|
305
|
+
getFriendMessageResult(response, includeFailureInfo),
|
|
142
306
|
),
|
|
143
307
|
),
|
|
144
|
-
shareFeedTemplate: ({ template, serverCallbackArgs }) =>
|
|
145
|
-
createShareDefault({ template, serverCallbackArgs, objectType: 'feed' }),
|
|
308
|
+
shareFeedTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
309
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'feed' }),
|
|
146
310
|
sendFeedTemplateToMe: ({ template }) => createSendDefaultMe({ template, objectType: 'feed' }),
|
|
147
|
-
sendFeedTemplateToFriends: ({ template, receiverUuids }) =>
|
|
148
|
-
createSendDefaultFriends({ template, receiverUuids, objectType: 'feed' }),
|
|
149
|
-
shareListTemplate: ({ template, serverCallbackArgs }) =>
|
|
150
|
-
createShareDefault({ template, serverCallbackArgs, objectType: 'list' }),
|
|
311
|
+
sendFeedTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
312
|
+
createSendDefaultFriends({ template, receiverUuids, includeFailureInfo, objectType: 'feed' }),
|
|
313
|
+
shareListTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
314
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'list' }),
|
|
151
315
|
sendListTemplateToMe: ({ template }) => createSendDefaultMe({ template, objectType: 'list' }),
|
|
152
|
-
sendListTemplateToFriends: ({ template, receiverUuids }) =>
|
|
153
|
-
createSendDefaultFriends({ template, receiverUuids, objectType: 'list' }),
|
|
154
|
-
shareLocationTemplate: ({ template, serverCallbackArgs }) =>
|
|
155
|
-
createShareDefault({ template, serverCallbackArgs, objectType: 'location' }),
|
|
316
|
+
sendListTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
317
|
+
createSendDefaultFriends({ template, receiverUuids, includeFailureInfo, objectType: 'list' }),
|
|
318
|
+
shareLocationTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
319
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'location' }),
|
|
156
320
|
sendLocationTemplateToMe: ({ template }) =>
|
|
157
321
|
createSendDefaultMe({ template, objectType: 'location' }),
|
|
158
|
-
sendLocationTemplateToFriends: ({ template, receiverUuids }) =>
|
|
159
|
-
createSendDefaultFriends({
|
|
160
|
-
|
|
161
|
-
|
|
322
|
+
sendLocationTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
323
|
+
createSendDefaultFriends({
|
|
324
|
+
template,
|
|
325
|
+
receiverUuids,
|
|
326
|
+
includeFailureInfo,
|
|
327
|
+
objectType: 'location',
|
|
328
|
+
}),
|
|
329
|
+
shareCommerceTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
330
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'commerce' }),
|
|
162
331
|
sendCommerceTemplateToMe: ({ template }) =>
|
|
163
332
|
createSendDefaultMe({ template, objectType: 'commerce' }),
|
|
164
|
-
sendCommerceTemplateToFriends: ({ template, receiverUuids }) =>
|
|
165
|
-
createSendDefaultFriends({
|
|
166
|
-
|
|
167
|
-
|
|
333
|
+
sendCommerceTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
334
|
+
createSendDefaultFriends({
|
|
335
|
+
template,
|
|
336
|
+
receiverUuids,
|
|
337
|
+
includeFailureInfo,
|
|
338
|
+
objectType: 'commerce',
|
|
339
|
+
}),
|
|
340
|
+
shareTextTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
341
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'text' }),
|
|
168
342
|
sendTextTemplateToMe: ({ template }) => createSendDefaultMe({ template, objectType: 'text' }),
|
|
169
|
-
sendTextTemplateToFriends: ({ template, receiverUuids }) =>
|
|
170
|
-
createSendDefaultFriends({ template, receiverUuids, objectType: 'text' }),
|
|
171
|
-
shareCalendarTemplate: ({ template, serverCallbackArgs }) =>
|
|
172
|
-
createShareDefault({ template, serverCallbackArgs, objectType: 'calendar' }),
|
|
343
|
+
sendTextTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
344
|
+
createSendDefaultFriends({ template, receiverUuids, includeFailureInfo, objectType: 'text' }),
|
|
345
|
+
shareCalendarTemplate: ({ template, serverCallbackArgs, pickerSettings }) =>
|
|
346
|
+
createShareDefault({ template, serverCallbackArgs, pickerSettings, objectType: 'calendar' }),
|
|
173
347
|
sendCalendarTemplateToMe: ({ template }) =>
|
|
174
348
|
createSendDefaultMe({ template, objectType: 'calendar' }),
|
|
175
|
-
sendCalendarTemplateToFriends: ({ template, receiverUuids }) =>
|
|
176
|
-
createSendDefaultFriends({
|
|
349
|
+
sendCalendarTemplateToFriends: ({ template, receiverUuids, includeFailureInfo }) =>
|
|
350
|
+
createSendDefaultFriends({
|
|
351
|
+
template,
|
|
352
|
+
receiverUuids,
|
|
353
|
+
includeFailureInfo,
|
|
354
|
+
objectType: 'calendar',
|
|
355
|
+
}),
|
|
177
356
|
};
|
|
357
|
+
|
|
358
|
+
async function unsupportedUrlBuilder(): Promise<never> {
|
|
359
|
+
kCreateWebError({
|
|
360
|
+
code: 'Package-UnsupportedPlatform',
|
|
361
|
+
message: 'The Kakao JavaScript SDK does not provide sharing URL builders.',
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
|
|
178
365
|
export const {
|
|
366
|
+
isKakaoTalkSharingAvailable,
|
|
367
|
+
getShareTemplateDiagnostics,
|
|
368
|
+
makeDefaultTemplateUrl,
|
|
369
|
+
makeCustomTemplateUrl,
|
|
370
|
+
makeScrapTemplateUrl,
|
|
371
|
+
uploadImage,
|
|
372
|
+
shareScrapTemplate,
|
|
373
|
+
sendScrapTemplateToMe,
|
|
374
|
+
sendScrapTemplateToFriends,
|
|
179
375
|
scrapImage,
|
|
180
376
|
sendCalendarTemplateToFriends,
|
|
181
377
|
sendCalendarTemplateToMe,
|
|
@@ -228,22 +228,95 @@ export type KakaoImageUploadResult = {
|
|
|
228
228
|
};
|
|
229
229
|
};
|
|
230
230
|
|
|
231
|
+
export type KakaoMessageSendResult = {
|
|
232
|
+
successfulReceiverUuids: string[];
|
|
233
|
+
failureInfos: {
|
|
234
|
+
code: Int32;
|
|
235
|
+
msg: string;
|
|
236
|
+
receiverUuids: string[];
|
|
237
|
+
}[];
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
export type KakaoSharePickerSettings = {
|
|
241
|
+
type?: 'default' | 'friend' | 'chat';
|
|
242
|
+
limit?: number;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export type KakaoDefaultTemplateParams = (
|
|
246
|
+
| { templateType: 'feed'; template: KakaoFeedTemplate }
|
|
247
|
+
| { templateType: 'list'; template: KakaoListTemplate }
|
|
248
|
+
| { templateType: 'location'; template: KakaoLocationTemplate }
|
|
249
|
+
| { templateType: 'commerce'; template: KakaoCommerceTemplate }
|
|
250
|
+
| { templateType: 'text'; template: KakaoTextTemplate }
|
|
251
|
+
| { templateType: 'calendar'; template: KakaoCalendarTemplate }
|
|
252
|
+
) & { serverCallbackArgs?: Readonly<Record<string, string>> };
|
|
253
|
+
|
|
254
|
+
export type KakaoShareTemplateDiagnosticsParams = (
|
|
255
|
+
| KakaoDefaultTemplateParams
|
|
256
|
+
| {
|
|
257
|
+
templateType: 'custom';
|
|
258
|
+
templateId: Double;
|
|
259
|
+
templateArgs?: Readonly<Record<string, string>>;
|
|
260
|
+
}
|
|
261
|
+
| {
|
|
262
|
+
templateType: 'scrap';
|
|
263
|
+
requestUrl: string;
|
|
264
|
+
templateId?: Double;
|
|
265
|
+
templateArgs?: Readonly<Record<string, string>>;
|
|
266
|
+
}
|
|
267
|
+
) & {
|
|
268
|
+
serverCallbackArgs?: Readonly<Record<string, string>>;
|
|
269
|
+
pickerSettings?: KakaoSharePickerSettings;
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
export type KakaoShareTemplateDiagnostics = {
|
|
273
|
+
warningMsg: Readonly<{ [key: string]: string }>;
|
|
274
|
+
argumentMsg: Readonly<{ [key: string]: string }>;
|
|
275
|
+
};
|
|
276
|
+
|
|
231
277
|
export interface Spec extends TurboModule {
|
|
278
|
+
isKakaoTalkSharingAvailable(): Promise<boolean>;
|
|
279
|
+
makeTemplateUrl(
|
|
280
|
+
templateType: string,
|
|
281
|
+
templateId: Double,
|
|
282
|
+
templateJson: UnsafeObject,
|
|
283
|
+
templateArgs: Readonly<{ [key: string]: string }>,
|
|
284
|
+
serverCallbackArgs: Readonly<{ [key: string]: string }>,
|
|
285
|
+
): Promise<string>;
|
|
286
|
+
getTemplateDiagnostics(
|
|
287
|
+
templateType: string,
|
|
288
|
+
templateId: Double,
|
|
289
|
+
templateJson: UnsafeObject,
|
|
290
|
+
templateArgs: Readonly<{ [key: string]: string }>,
|
|
291
|
+
serverCallbackArgs: Readonly<{ [key: string]: string }>,
|
|
292
|
+
pickerSettings?: UnsafeObject,
|
|
293
|
+
): Promise<KakaoShareTemplateDiagnostics>;
|
|
294
|
+
uploadImage(imageUri: string, secureResource: boolean): Promise<KakaoImageUploadResult>;
|
|
295
|
+
shareScrapTemplate(
|
|
296
|
+
requestUrl: string,
|
|
297
|
+
useWebBrowserIfKakaoTalkNotAvailable: boolean,
|
|
298
|
+
templateId?: Double,
|
|
299
|
+
templateArgs?: Readonly<{ [key: string]: string }>,
|
|
300
|
+
serverCallbackArgs?: Readonly<{ [key: string]: string }>,
|
|
301
|
+
pickerSettings?: UnsafeObject,
|
|
302
|
+
): Promise<void>;
|
|
303
|
+
|
|
232
304
|
scrapImage(imageUrl: string, secureResource: boolean): Promise<KakaoImageUploadResult>;
|
|
233
305
|
shareOrSendMeOrSendFriendOrWhatever(
|
|
234
306
|
/* share, send-me, send-friend */
|
|
235
307
|
sendType: string,
|
|
236
|
-
/* custom, feed, list, location, commerce, text, calendar */
|
|
308
|
+
/* custom, scrap, feed, list, location, commerce, text, calendar */
|
|
237
309
|
templateType: string,
|
|
238
|
-
/* only for custom */
|
|
310
|
+
/* only for custom or scrap (-1 uses the default scrap template) */
|
|
239
311
|
templateId: Double,
|
|
240
|
-
/*
|
|
312
|
+
/* default template fields or { requestUrl } for scrap */
|
|
241
313
|
templateJson: UnsafeObject,
|
|
242
314
|
/* only for pass friend uuid directly */
|
|
243
315
|
receiverUuids: ReadonlyArray<string>,
|
|
244
316
|
useWebBrowserIfKakaoTalkNotAvailable: boolean,
|
|
245
317
|
templateArgs: Readonly<{ [key: string]: string }>,
|
|
246
318
|
serverCallbackArgs: Readonly<{ [key: string]: string }>,
|
|
319
|
+
pickerSettings?: UnsafeObject,
|
|
247
320
|
): Promise<any>;
|
|
248
321
|
}
|
|
249
322
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { kAssert } from '@react-native-kakao/core';
|
|
2
|
+
|
|
3
|
+
import type { KakaoSharePickerSettings } from './spec/NativeKakaoShare';
|
|
4
|
+
|
|
5
|
+
const minSelectionLimit = 1;
|
|
6
|
+
const maxSelectionLimit = 10;
|
|
7
|
+
|
|
8
|
+
export function validateSharePickerSettings(pickerSettings?: KakaoSharePickerSettings) {
|
|
9
|
+
if (pickerSettings == null) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
kAssert(
|
|
14
|
+
typeof pickerSettings === 'object' && !Array.isArray(pickerSettings),
|
|
15
|
+
'[share] pickerSettings must be an object',
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
const { type, limit } = pickerSettings;
|
|
19
|
+
kAssert(
|
|
20
|
+
type == null || ['default', 'friend', 'chat'].includes(type),
|
|
21
|
+
'[share] pickerSettings.type must be default, friend, or chat',
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
kAssert(
|
|
25
|
+
limit == null ||
|
|
26
|
+
(Number.isInteger(limit) && limit >= minSelectionLimit && limit <= maxSelectionLimit),
|
|
27
|
+
`[share] pickerSettings.limit must be an integer between ${minSelectionLimit} and ${maxSelectionLimit}`,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
if (type == null && limit == null) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
...(type != null && { type }),
|
|
36
|
+
...(limit != null && { limit }),
|
|
37
|
+
};
|
|
38
|
+
}
|